3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 390
|
|
Как отлаживать в Visual Studio (2019) DLL, разработанную для сторонней программы - внешнюю компоненту 1С?26.09.2024, 22:00. Показов 5554. Ответов 7
Метки нет Все метки)
(
Добрый вечер!
Решил написать элементарную внешнюю компоненту на C++ (VisualSudio). Для этого необходимо создать DLL с определенными функциями и отдать ее обработке 1С, которая должна ее загрузить, опознать и использовать, если все ОК. Файл DLL я создал, не совсем понятно, как его трассировать в отладчике VS. В VS я собираю проект (DLL), создается моя DLL, запускаю конфигуратор 1С, потом через него - саму платформу 1С, запускаю в 1С обработку, которая должна обратиться к DLL. Перед этим запуском обработки в отладчике VS даю команду - присоединиться к процессу платформу 1С. Здесь все OK - переходит в режим отладки. Однако когда ставлю точку останова в коде DLL отладчик VS говорит, что попадание в нее не произойдет - нет отладочных символов. Однако я собирал проект VS для Debug x64, т.е. для отладки, и вижу, что файл отладочных символов *.PDB лежит в той же папке, что и DLL - в чем тогда проблема, почему могут быть не видны отладочные символы ? Прочитал, что если отладчик не видит PDB, надо окрыть список (окно) модулей и показать, где лежит PDB. Но когда я открываю это окно, в нем нет моей DLL. Скорее всего, 1С еще загрузила ее... А как же тогда трассировать DLL ?
0
|
26.09.2024, 22:00 | |
Ответы с готовыми решениями:
7
Как использовать внешнюю библиотеку в Microsoft Visual Studio 2019? Ошибка VCRUNTIME140.dll или же как удалить все файлы Visual Studio от 2015 до 2019 Как отлаживать JavaScript в Visual Studio? |
![]() 736 / 334 / 88
Регистрация: 07.01.2023
Сообщений: 1,415
|
||||||
03.10.2024, 10:41 | ||||||
Отладкой в логи.. иначе никак. Тут вот в чем фигня. Ваша dll является загружаемой из кода через LoadLibrary. После чего платформа дергает GetProcAddress для GetClassObject и вот тут уже случается ваш класс. Поэтому или подключайтесь к процессу 1с после вызова "УстановитьВнешнююКомпоненту" или используйте отладку в логи
1
|
2717 / 870 / 329
Регистрация: 10.02.2018
Сообщений: 2,063
|
|
03.10.2024, 13:27 | |
LUN2, есть ещё один вариант отладки библиотек без отдельного подключения к процессу. В настройках проекта есть пункт отладка. Для библиотеки можно указать в этих настройках экзешник, который будет использовать данную библиотеку. В таком случае при запуске проекта (библиотеки) запустится указанный экзешник и отладчик сразу подсоединится к нему и символы к библиотеке уже будут подгружены. Я так делал, когда библиотека грузится сразу при старте экзешника, а отдельное присоединение к работающему процессу заведомо произойдёт позже отлаживаемых действий.
1
|
2717 / 870 / 329
Регистрация: 10.02.2018
Сообщений: 2,063
|
|
03.10.2024, 14:47 | |
Это не важно. У меня схожая история. Библиотека грузится динамически и берётся из локальной папки экзешника. Даже более того, всё это дело запускается на удалённой машине без студии. Главное, что бы dll соответствовал pdb. Просто копировал библиотеку в нужное место после компиляции. Для удалёнки ещё нужно запустить соответствующий msvsmon на сервере.
1
|
3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 390
|
|
03.10.2024, 22:18 [ТС] | |
Azathtot, спасибо!
Да то же примерно до того же дошел, только логи в специально созданное для этого консольное окно. Добавлено через 4 минуты Ygg, спасибо за совет! Такими штуками не пользовался - хочу проверить, правильно ли я Вас понял - запускается Service.exe, грузит DLL и Вы поэтому уже можете ставить в DLL точки останова, а когда с DLL будет работать основной проект (это не Service), DLL уже будет готова к отладке, т.к. яя Service подготовил ? В этом случае - Service - это отдельный "загружальщик" DLL, который пишется отдельно ?
0
|
2717 / 870 / 329
Регистрация: 10.02.2018
Сообщений: 2,063
|
|
04.10.2024, 06:45 | |
Не обязательно делать свою отдельную программу, можно использовать чужую уже готовую и без символов. Главное, что бы были актуальные символы к своей отлаживаемой библиотеке. И да, точки останова можно ставить ещё до запуска.
0
|
![]() 7 / 7 / 3
Регистрация: 04.09.2016
Сообщений: 33
|
||||||
14.10.2024, 21:56 | ||||||
Мда. Что-то в этом году и меня потянуло на создание dll-ок ))
Ну и, естественно, вопрос отладки тоже встал ребром. Да, штука эта, надо сказать, не тривиальная, однако решил я этот вопрос достаточно легко. Есть такой известный персонаж в области создания всякого рода полезных инструментов, как Марк Руссинович. Он настолько хорош, что его контору вместе с ним купил сам Майкрософт! У него есть инструмент под названием DebugView, это утилита, которая перехватывает предназначенные для отладки сообщения, создаваемые Сишной функцией OutputDebugString(). В точках контроля при отладке можно использовать, например, такой код:
Рекомендую, очень удобно.
1
|
14.10.2024, 21:56 | ||||||
Помогаю со студенческими работами здесь
8
Как отлаживать код в Visual Studio? Отсутствие MSVCP140D.dll в release версии Visual Studio 2019 на других компьютерах На каком Visual Studio можно отлаживать ассемблерный код для винды 32р Как настроить visual studio community 2019 для разработки React приложений Как настроить Visual Studio Community 2019 для разработки React приложений? Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть.
Дело в том, что я. . .
|
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
|
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
|
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
|
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
|
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
|
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
|
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
|
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
|
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
|