Сборка смешанного режима не загружает символ для родных C ++ pdbs - PullRequest
6 голосов
/ 24 июля 2010

Я работаю со сборками смешанного режима в C ++ / CLI.Все pdb, собранные в управляемом режиме, загружаются при успешной сборке в смешанном режиме, но нативные dll и pdb не загружаются, даже если информация о нативных pdb отображается на панели модулей (т.е. в VS Debug-> Windows-> Modules).1001 *

Я использую нативную dll и вызываю ее экспортированную функцию в смешанной сборке в коде C ++ / CLI.Здесь функции вызываются успешно, но нативные символы pdb не загружаются, и все точки останова в нативном коде отображаются в виде пустого круга, а подсказки инструментов говорят, что для этого нет загруженных символов.

Я сделал все, pdbпомещается в текущий каталог, куда запускается управляемый процесс;удалил все папки obj и debug и перекомпилировал каждый проект одновременно;Я даже использовал утилиту ChkMatch, которая показывает, что символы в Exe и соответствующем pdb совпадают.

Есть ли способ включить точки останова собственного кода при вызове из управляемого кода (смешанный режим C ++ / LCI)?

С уважением,

Усман

1 Ответ

16 голосов
/ 24 июля 2010

Отладка в смешанном режиме может быть хитом и промахом, в основном промахом. Сначала убедитесь, что у вас действительно включена отладка в смешанном режиме. Из проекта C # это флажок Project + Properties, Debug, Enabled unmanaged code debugging. Далее, отладка в смешанном режиме не включена для 64-битных процессов. Если вы работаете в 64-битной операционной системе, убедитесь, что .exe работает в 32-битном режиме. Проект + Свойства, вкладка «Построение», Цель платформы = x86.

Затем проверьте, где отладчик искал файлы .pdb. В окне «Отладка + Windows + Модули» щелкните правой кнопкой мыши DLL и выберите «Информация о загрузке символов». Последний вздох заключается в использовании __debugbreak () в неуправляемом коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...