Прикрепление DLL к управляемому процессу не работает - PullRequest
0 голосов
/ 04 января 2019

У меня есть проект C ++ DLL (x86), который мне нужно отладить. Эта DLL используется exe.

Я могу легко прикрепить проект DLL в VS2017 к собственному исполняемому файлу (x86). Когда я устанавливаю точки останова в проекте C ++ DLL в VS2017, эти точки останова достигаются. Это нормальное, желаемое поведение.

Теперь я подключил проект C ++ DLL к .NET exe (скомпилирован как x86). Точки останова не бьют, и я понятия не имею, почему это не работает, как с нативным exe.

Я снял флажок «Использовать среду приложений», но это ничего не изменило.

Я также безуспешно пробовал опцию «Включить отладку собственного кода». Также я попытался прикрепить его к отладочной версии NET exe и к выпускной версии NET exe.

Я вижу, что VS2017 подключается к правильному процессу, так как когда я закрываю NET exe, VS2017 выходит из режима отладки.

Однако точки останова не достигаются.

Есть ли что-то особенное, о чем я должен позаботиться?

1 Ответ

0 голосов
/ 04 января 2019

Скорее всего, управляемый .exe не загрузил собственную DLL. Или он загрузил неверную сборку DLL, а не ту, которую вы отлаживаете.

Чтобы устранить неполадки, добавьте __debugbreak(); call в ваш собственный код. Такой тип точки останова вряд ли будет игнорироваться, если только вы не возитесь со структурной обработкой исключений. Windows покажет вам сообщение с предложением присоединить отладчик, вы можете выбрать существующий экземпляр Visual Studio. После подключения окно «Модули» покажет вам, какую именно сборку встроенной библиотеки DLL он загрузил.

Лучший способ решить эту проблему навсегда - добавить два проекта в одно решение Visual Studio, настроить зависимость и убедиться, что место вывода DLL находится там, где EXE ищет библиотеку. Я делаю это все время в VS2017, с включенной отладкой собственного кода, я могу устанавливать свои контрольные точки в управляемом или собственном коде, что очень помогает при отладке взаимодействия.

...