С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 378
1

Как отлаживать в Visual Studio (2019) DLL, разработанную для сторонней программы - внешнюю компоненту 1С?

26.09.2024, 22:00. Показов 2516. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Решил написать элементарную внешнюю компоненту на 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2024, 22:00
Ответы с готовыми решениями:

Как использовать внешнюю библиотеку в Microsoft Visual Studio 2019?
Как использовать внешнюю библиотеку в Microsoft Visual Studio 2019? нужна сама библиотека .dll,...

Ошибка VCRUNTIME140.dll или же как удалить все файлы Visual Studio от 2015 до 2019
Хотел поиграть в одну игру, вылезла ошибка VCRUNTIME140.dll, этот файл у меня есть но игра все...

Как отлаживать JavaScript в Visual Studio?
Выставил такие настройки: В настройках VS поставил галочки "Включить отладку JavaScript...

Как отлаживать код в Visual Studio?
подскажите пожалуйсто как производить откладку кода c++ написанного в visual studio, при этом идёт...

7
680 / 290 / 74
Регистрация: 07.01.2023
Сообщений: 1,198
03.10.2024, 10:41 2
Цитата Сообщение от LUN2 Посмотреть сообщение
А как же тогда трассировать DLL ?
Отладкой в логи.. иначе никак. Тут вот в чем фигня. Ваша dll является загружаемой из кода через LoadLibrary. После чего платформа дергает GetProcAddress для GetClassObject и вот тут уже случается ваш класс. Поэтому или подключайтесь к процессу 1с после вызова "УстановитьВнешнююКомпоненту" или используйте отладку в логи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void dolog(const char *fmt,...) {
    char TEMP_NAME[MAX_PATH],LOG_FILE[MAX_PATH];
    GetTempPath(MAX_PATH,TEMP_NAME);
    sprintf(LOG_FILE,"%s\\%s.log",TEMP_NAME,(char *)*TAG);
    if(fmt == NULL) {
        FILE *f = fopen(LOG_FILE,"w+");
        fclose(f);
        return;
    }
    va_list l;
    va_start(l,fmt);
    char * buff = new char[strlen(fmt)*3];
    vsprintf(buff,fmt,l);
    va_end(l);
    FILE *f = fopen(LOG_FILE,"a+");
    if(f) {
        fprintf(f,"%s\n",buff);
        fclose(f);
    }
    delete [] buff;
}
Выше пример записи отладки в файл %TEMP%/Имя ВК.log который я использую у себя.
1
2710 / 864 / 327
Регистрация: 10.02.2018
Сообщений: 2,044
03.10.2024, 13:27 3
LUN2, есть ещё один вариант отладки библиотек без отдельного подключения к процессу. В настройках проекта есть пункт отладка. Для библиотеки можно указать в этих настройках экзешник, который будет использовать данную библиотеку. В таком случае при запуске проекта (библиотеки) запустится указанный экзешник и отладчик сразу подсоединится к нему и символы к библиотеке уже будут подгружены. Я так делал, когда библиотека грузится сразу при старте экзешника, а отдельное присоединение к работающему процессу заведомо произойдёт позже отлаживаемых действий.
Миниатюры
Как отлаживать в Visual Studio (2019) DLL, разработанную для сторонней программы - внешнюю компоненту 1С?  
1
680 / 290 / 74
Регистрация: 07.01.2023
Сообщений: 1,198
03.10.2024, 14:10 4
Цитата Сообщение от Ygg Посмотреть сообщение
Я так делал, когда библиотека грузится сразу при старте экзешника,
Там хитрая система веревочек... мало того, что она грузится не сразу, так еще и не из того места, в которое ее кладет VS...
0
2710 / 864 / 327
Регистрация: 10.02.2018
Сообщений: 2,044
03.10.2024, 14:47 5
Цитата Сообщение от Azathtot Посмотреть сообщение
Там хитрая система веревочек... мало того, что она грузится не сразу, так еще и не из того места, в которое ее кладет VS...
Это не важно. У меня схожая история. Библиотека грузится динамически и берётся из локальной папки экзешника. Даже более того, всё это дело запускается на удалённой машине без студии. Главное, что бы dll соответствовал pdb. Просто копировал библиотеку в нужное место после компиляции. Для удалёнки ещё нужно запустить соответствующий msvsmon на сервере.
1
3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 378
03.10.2024, 22:18  [ТС] 6
Azathtot, спасибо!
Да то же примерно до того же дошел,
только логи в специально созданное для этого консольное окно.

Добавлено через 4 минуты
Ygg, спасибо за совет!
Такими штуками не пользовался - хочу проверить, правильно ли я Вас понял - запускается Service.exe, грузит DLL и Вы поэтому уже можете ставить в DLL точки останова,
а когда с DLL будет работать основной проект (это не Service), DLL уже будет готова к отладке, т.к. яя Service подготовил ?

В этом случае - Service - это отдельный "загружальщик" DLL, который пишется отдельно ?
0
2710 / 864 / 327
Регистрация: 10.02.2018
Сообщений: 2,044
04.10.2024, 06:45 7
Цитата Сообщение от LUN2 Посмотреть сообщение
В этом случае - Service - это отдельный "загружальщик" DLL, который пишется отдельно ?
Не обязательно делать свою отдельную программу, можно использовать чужую уже готовую и без символов. Главное, что бы были актуальные символы к своей отлаживаемой библиотеке. И да, точки останова можно ставить ещё до запуска.
0
7 / 7 / 3
Регистрация: 04.09.2016
Сообщений: 33
14.10.2024, 21:56 8
Мда. Что-то в этом году и меня потянуло на создание dll-ок ))
Ну и, естественно, вопрос отладки тоже встал ребром.
Да, штука эта, надо сказать, не тривиальная, однако решил я этот вопрос достаточно легко.
Есть такой известный персонаж в области создания всякого рода полезных инструментов, как Марк Руссинович.
Он настолько хорош, что его контору вместе с ним купил сам Майкрософт!
У него есть инструмент под названием DebugView, это утилита, которая перехватывает предназначенные для отладки сообщения, создаваемые Сишной функцией OutputDebugString().
В точках контроля при отладке можно использовать, например, такой код:

C++
1
2
3
TCHAR S[MAX_PATH];
wsprintf(S, L"InjectFunction: найдено главное окно, HWND = %p", hwndMainWindow);
OutputDebugString(S);
Когда выполнится этот код, в окне DebugView появится соответствующая строка.
Рекомендую, очень удобно.
1
14.10.2024, 21:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2024, 21:56
Помогаю со студенческими работами здесь

Отсутствие MSVCP140D.dll в release версии Visual Studio 2019 на других компьютерах
На форуме уже есть вопрос по этому файлу, но ответы на него мне не помогли. При запуску .exe со...

На каком Visual Studio можно отлаживать ассемблерный код для винды 32р
Какую Visual Studio лучше скачать?, что бы можно было пользоваться отладчиком для ассемблера,...

Как настроить visual studio community 2019 для разработки React приложений
Доброго всем времени суток. Помогите пожалуйста настроить visual studio community 2019 для...

Как настроить Visual Studio Community 2019 для разработки React приложений?
Доброго всем времени суток. Помогите пожалуйста настроить visual studio community 2019 для...

Как сделать иконку для выходного exe-файла Visual Studio 2019?
Как сделать иконку для выходного exe-файла Visual Studio 2019? Что-то не могу найти, может кто...

Не работает(не подключается) Visual Leak Detector для Visual Studio 2019
Всем доброго времени суток!Возникла проблема,что Visual Leak Detector не хочет подключаться с...

Visual Studio Installer после обновления не видит установленную Visual Studio 2019
При попытке добавить компоненты Visual Studio 2019 запускается Visual Studio Installer, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru