Не удается отладить неуправляемую Dll от С#
У меня есть DLL, которая была написана в C++
и вызвана из приложения C#
. DLL
- неуправляемый код.
Если я скопирую файлы DLL
и его .pdb
с событием пост-сборки в C#
выполнение отладки приложения dir
, я все равно не могу ударить по каким-либо точкам останова, которые я ввел в код DLL
. В точке останова есть прикрепленное к нему сообщение, в котором говорится, что "для этого документа не было загружено никаких символов".
Что еще мне нужно сделать, чтобы получить отладку в источнике DLL
?
У меня есть Tools
→ Options
→ Debugging
→ General
→ Enable
только мой код "Отключен.
DLL
скомпилируется с помощью "Отслеживание времени выполнения и отключения оптимизации (/ASSEMBLYDEBUG)" и "Генерация отладочной информации" в "Да (/DEBUG)"
Ответы
Ответ 1
Чтобы отлаживать вашу С++ DLL, вам нужно включить отладку смешанного режима в приложении для запуска в вашем решении.
- Щелкните правой кнопкой мыши по проекту → Свойства
- Перейдите на вкладку "Отладка"
- Отметьте "Включить неуправляемую отладку кода"
Это позволит вам отлаживать собственный код для сценария стиля F5. Если вы хотите включить его для присоединения к процессу, выполните следующие действия в диалоговом окне "Прикрепить к процессу"
- Выберите процесс для отладки
- Нажмите кнопку "Выбрать..." над списком процессов
- Нажмите "Отладить эти типы кода"
- Проверьте как управляемые, так и родные
Ответ 2
Вам нужно включить неуправляемую (Native) отладку.
Если вы подключаетесь к процессу после его запуска:
Перейдите в меню "Сервис", а затем присоединитесь к процессу, убедитесь, что включена встроенная отладка.
Вы увидите окно редактирования только для чтения:
Присоединить к: Управляемый код, собственный код [Выбрать]
Убедитесь, что там указан первичный код. Если не добавить его.
Если вы запускаете свой проект из визуальной студии:
В свойствах проекта, которые вы запускаете в режиме отладки. Перейдите к свойствам проекта и выберите вкладку отладки.
Убедитесь, что установлен этот флажок:
Включение неуправляемой отладки кода
Ответ 3
При подключении к процессу для отладки вы должны указать, как вы хотите подключиться. У вас есть несколько вариантов: Managed и Native. Чтобы отлаживать код С# с неуправляемым С++, вы должны присоединяться к процессу как управляемому и как Native (оба могут быть выбраны одновременно).
Ответ 4
Я столкнулся с той же проблемой и сделал все, что было предложено в принятом ответе, но точки останова в неуправляемой dll не пострадали!
Однако, когда я сделал следующее, я смог наконец отладить dll!
Выберите решение в обозревателе решений
Выберите из меню | Инструменты | параметры | Отладка | Общие
Снимите флажок "Требовать, чтобы исходные файлы соответствовали оригинальной версии"