Сборка в смешанном режиме не загружает символ для собственных баз данных C ++

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

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

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

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

С уважением,

Усмань


person Usman    schedule 24.07.2010    source источник
comment
Удален тег winpdb. winpdb - это отладчик Python с особенно запутанным именем.   -  person Codie CodeMonkey    schedule 08.02.2013


Ответы (1)


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

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


ОБНОВЛЕНИЕ: последние версии VS (начиная с VS2012) имеют новый управляемый механизм отладки, который недостаточно совместим с неуправляемым механизмом отладки. Инструменты> Параметры> Отладка> Общие, отметьте «Использовать управляемый режим совместимости». Он включает устаревший механизм отладки, последний из которых использовался в VS2010.

person Hans Passant    schedule 24.07.2010
comment
Отладка в 64-битном смешанном режиме работает с .NET Framework 4. - person Kevin; 03.10.2016