3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 360
|
|
1 | |
Как отлаживать в Visual Studio (2019) DLL, разработанную для сторонней программы - внешнюю компоненту 1С?26.09.2024, 22:00. Показов 1721. Ответов 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? Как отлаживать код в Visual Studio? |
484 / 267 / 67
Регистрация: 07.01.2023
Сообщений: 1,107
|
||||||
03.10.2024, 10:41 | 2 | |||||
Отладкой в логи.. иначе никак. Тут вот в чем фигня. Ваша dll является загружаемой из кода через LoadLibrary. После чего платформа дергает GetProcAddress для GetClassObject и вот тут уже случается ваш класс. Поэтому или подключайтесь к процессу 1с после вызова "УстановитьВнешнююКомпоненту" или используйте отладку в логи
1
|
2707 / 862 / 325
Регистрация: 10.02.2018
Сообщений: 2,042
|
|
03.10.2024, 13:27 | 3 |
LUN2, есть ещё один вариант отладки библиотек без отдельного подключения к процессу. В настройках проекта есть пункт отладка. Для библиотеки можно указать в этих настройках экзешник, который будет использовать данную библиотеку. В таком случае при запуске проекта (библиотеки) запустится указанный экзешник и отладчик сразу подсоединится к нему и символы к библиотеке уже будут подгружены. Я так делал, когда библиотека грузится сразу при старте экзешника, а отдельное присоединение к работающему процессу заведомо произойдёт позже отлаживаемых действий.
1
|
484 / 267 / 67
Регистрация: 07.01.2023
Сообщений: 1,107
|
|
03.10.2024, 14:10 | 4 |
Там хитрая система веревочек... мало того, что она грузится не сразу, так еще и не из того места, в которое ее кладет VS...
0
|
2707 / 862 / 325
Регистрация: 10.02.2018
Сообщений: 2,042
|
|
03.10.2024, 14:47 | 5 |
Это не важно. У меня схожая история. Библиотека грузится динамически и берётся из локальной папки экзешника. Даже более того, всё это дело запускается на удалённой машине без студии. Главное, что бы dll соответствовал pdb. Просто копировал библиотеку в нужное место после компиляции. Для удалёнки ещё нужно запустить соответствующий msvsmon на сервере.
1
|
3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 360
|
|
03.10.2024, 22:18 [ТС] | 6 |
Azathtot, спасибо!
Да то же примерно до того же дошел, только логи в специально созданное для этого консольное окно. Добавлено через 4 минуты Ygg, спасибо за совет! Такими штуками не пользовался - хочу проверить, правильно ли я Вас понял - запускается Service.exe, грузит DLL и Вы поэтому уже можете ставить в DLL точки останова, а когда с DLL будет работать основной проект (это не Service), DLL уже будет готова к отладке, т.к. яя Service подготовил ? В этом случае - Service - это отдельный "загружальщик" DLL, который пишется отдельно ?
0
|
2707 / 862 / 325
Регистрация: 10.02.2018
Сообщений: 2,042
|
|
04.10.2024, 06:45 | 7 |
Не обязательно делать свою отдельную программу, можно использовать чужую уже готовую и без символов. Главное, что бы были актуальные символы к своей отлаживаемой библиотеке. И да, точки останова можно ставить ещё до запуска.
0
|
7 / 7 / 3
Регистрация: 04.09.2016
Сообщений: 33
|
||||||
14.10.2024, 21:56 | 8 | |||||
Мда. Что-то в этом году и меня потянуло на создание dll-ок ))
Ну и, естественно, вопрос отладки тоже встал ребром. Да, штука эта, надо сказать, не тривиальная, однако решил я этот вопрос достаточно легко. Есть такой известный персонаж в области создания всякого рода полезных инструментов, как Марк Руссинович. Он настолько хорош, что его контору вместе с ним купил сам Майкрософт! У него есть инструмент под названием DebugView, это утилита, которая перехватывает предназначенные для отладки сообщения, создаваемые Сишной функцией OutputDebugString(). В точках контроля при отладке можно использовать, например, такой код:
Рекомендую, очень удобно.
1
|
14.10.2024, 21:56 | |
14.10.2024, 21:56 | |
Помогаю со студенческими работами здесь
8
Отсутствие MSVCP140D.dll в release версии Visual Studio 2019 на других компьютерах На каком Visual Studio можно отлаживать ассемблерный код для винды 32р Как настроить visual studio community 2019 для разработки React приложений Как настроить Visual Studio Community 2019 для разработки React приложений? Как сделать иконку для выходного exe-файла Visual Studio 2019? Не работает(не подключается) Visual Leak Detector для Visual Studio 2019 Visual Studio Installer после обновления не видит установленную Visual Studio 2019 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |