Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 390

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

26.09.2024, 22:00. Показов 5554. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2024, 22:00
Ответы с готовыми решениями:

Как использовать внешнюю библиотеку в Microsoft Visual Studio 2019?
Как использовать внешнюю библиотеку в Microsoft Visual Studio 2019? нужна сама библиотека .dll, нужны заголовки .h, что ещё? Куда нужно это...

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

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

7
 Аватар для Azathtot
736 / 334 / 88
Регистрация: 07.01.2023
Сообщений: 1,415
03.10.2024, 10:41
Цитата Сообщение от 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
2717 / 870 / 329
Регистрация: 10.02.2018
Сообщений: 2,063
03.10.2024, 13:27
LUN2, есть ещё один вариант отладки библиотек без отдельного подключения к процессу. В настройках проекта есть пункт отладка. Для библиотеки можно указать в этих настройках экзешник, который будет использовать данную библиотеку. В таком случае при запуске проекта (библиотеки) запустится указанный экзешник и отладчик сразу подсоединится к нему и символы к библиотеке уже будут подгружены. Я так делал, когда библиотека грузится сразу при старте экзешника, а отдельное присоединение к работающему процессу заведомо произойдёт позже отлаживаемых действий.
Миниатюры
Как отлаживать в Visual Studio (2019) DLL, разработанную для сторонней программы - внешнюю компоненту 1С?  
1
 Аватар для Azathtot
736 / 334 / 88
Регистрация: 07.01.2023
Сообщений: 1,415
03.10.2024, 14:10
Цитата Сообщение от Ygg Посмотреть сообщение
Я так делал, когда библиотека грузится сразу при старте экзешника,
Там хитрая система веревочек... мало того, что она грузится не сразу, так еще и не из того места, в которое ее кладет VS...
0
2717 / 870 / 329
Регистрация: 10.02.2018
Сообщений: 2,063
03.10.2024, 14:47
Цитата Сообщение от Azathtot Посмотреть сообщение
Там хитрая система веревочек... мало того, что она грузится не сразу, так еще и не из того места, в которое ее кладет VS...
Это не важно. У меня схожая история. Библиотека грузится динамически и берётся из локальной папки экзешника. Даже более того, всё это дело запускается на удалённой машине без студии. Главное, что бы 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
Цитата Сообщение от LUN2 Посмотреть сообщение
В этом случае - Service - это отдельный "загружальщик" DLL, который пишется отдельно ?
Не обязательно делать свою отдельную программу, можно использовать чужую уже готовую и без символов. Главное, что бы были актуальные символы к своей отлаживаемой библиотеке. И да, точки останова можно ставить ещё до запуска.
0
 Аватар для remboserver
7 / 7 / 3
Регистрация: 04.09.2016
Сообщений: 33
14.10.2024, 21:56
Мда. Что-то в этом году и меня потянуло на создание dll-ок ))
Ну и, естественно, вопрос отладки тоже встал ребром.
Да, штука эта, надо сказать, не тривиальная, однако решил я этот вопрос достаточно легко.
Есть такой известный персонаж в области создания всякого рода полезных инструментов, как Марк Руссинович.
Он настолько хорош, что его контору вместе с ним купил сам Майкрософт!
У него есть инструмент под названием DebugView, это утилита, которая перехватывает предназначенные для отладки сообщения, создаваемые Сишной функцией OutputDebugString().
В точках контроля при отладке можно использовать, например, такой код:

C++ Скопировано
1
2
3
TCHAR S[MAX_PATH];
wsprintf(S, L"InjectFunction: найдено главное окно, HWND = %p", hwndMainWindow);
OutputDebugString(S);
Когда выполнится этот код, в окне DebugView появится соответствующая строка.
Рекомендую, очень удобно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2024, 21:56
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Работа с объемным 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
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер