Как подключить отладчик для перехода на собственный (С++) код из управляемой (С#) оболочки?
У меня есть обертка вокруг вызова функции С++, которую я вызываю из кода С#. Как подключить отладчик в Visual Studio для перехода на собственный код на С++?
Это оболочка, которая у меня есть, которая вызывает GetData(), определенную в файле С++:
[DllImport("Unmanaged.dll", CallingConvention=CallingConvention.Cdecl,
EntryPoint = "GetData", BestFitMapping = false)]
public static extern String GetData(String url);
Сбой кода и я хочу выяснить причину.
Спасибо,
Нихилу
Ответы
Ответ 1
Откроется вкладка "Отладка" на странице свойств проекта. Должна быть установлен флажок "Включить неуправляемый отладку кода". Это сработало для меня, когда мы разработали новый .NET UI для наших старых библиотек С++.
Если ваша неуправляемая DLL создается из другого проекта (какое-то время наша работа строилась с использованием VS6), просто убедитесь, что у вас есть файл pdb DLL, удобный для отладки.
Другим подходом является использование С# exe в качестве целевого exe для запуска из проекта DLL, вы можете нормально отлаживать вашу DLL.
Ответ 2
в дополнение к Lou советуем для запуска отладчика, вы можете выбрать, какие отладочные механизмы используются при подключении к существующему процессу, нажав "Выбрать..." в диалоговом окне "Приложить к процессу" и выбрав "управляемый код" 'и' native code '.
Отладка таким образом называется отладкой смешанного режима. См. Это сообщение в блоге для получения некоторых советов.
Я считаю, что это не поддерживается для 64-битных процессов... хотя хотелось бы ошибиться в этом вопросе.
Ответ 3
Для всех, кто использует WinDbg:
1 > Символы настройки
Посмотрите на эти команды. (Справка: в консоли .hh <command> )
.sympath
.sympath+
.symfix
2 > Настройка пути источника
.srcpath
3 > Загрузите расширение SOS для отладки программ с управляемым/смешанным режимом.
(Убедитесь, что вы правильно настроили путь расширения)
Добавьте Microsoft.NET\Framework\v2.0.50727 для x86, используя -
.extpath
Установите контрольную точку для загрузки clr.
sxe ld:mscorwks
(F5/g)
(Подождите, пока ModLoad BP на mscorwks.dll)
Удостоверьтесь, что у вас уже нет дублированного расширения sos. См:
.chain
Теперь мы готовы загрузить расширение sos.:)
.loadby sos mscorwks
4 > Перезагрузите все символы.
.reload
Теперь вы все настроены:)
(YMMV)
Ответ 4
Смешанная отладка не поддерживается в 64-битном режиме (как в Visual Studio 2008).