Как подключить отладчик для перехода на собственный (C ++) код из управляемой (C #) оболочки? - PullRequest
16 голосов
/ 12 сентября 2008

У меня есть обертка вокруг вызова функции C ++, который я вызываю из кода C #. Как мне подключить отладчик в Visual Studio для перехода на собственный код C ++?

Это оболочка, которая у меня есть, которая вызывает GetData (), определенную в файле C ++:

    [DllImport("Unmanaged.dll", CallingConvention=CallingConvention.Cdecl, 
               EntryPoint = "GetData", BestFitMapping = false)]
        public static extern String GetData(String url);

Код сбой, и я хочу выяснить причину.

Спасибо, Нихилу

Ответы [ 4 ]

22 голосов
/ 12 сентября 2008

Проверьте вкладку «Отладка» на странице свойств вашего проекта. Должен быть флажок «Включить отладку неуправляемого кода». Это сработало для меня, когда мы разработали новый .NET UI для наших старых библиотек c ++.

Если ваша неуправляемая DLL собирается из другого проекта (какое-то время наш создавался с использованием VS6), просто убедитесь, что у вас есть файл pdb DLL, пригодный для отладки.

Другой подход заключается в использовании C # exe в качестве целевого exe-файла для запуска из проекта DLL, затем вы можете нормально отлаживать вашу DLL.

7 голосов
/ 12 сентября 2008

в дополнение к совету Лу по запуску отладчика вы можете выбрать, какие механизмы отладки использовать при подключении к существующему процессу, нажав «Выбрать ...» в диалоговом окне «присоединить к процессу» и выбрав оба «управляемый код» 'и' нативный код '.

Отладка таким способом называется отладкой в ​​смешанном режиме. См. сообщение в блоге для некоторых советов.

Я считаю, что это не поддерживается для 64-битных процессов ... хотя хотелось бы ошибиться в этом вопросе.

2 голосов
/ 09 апреля 2009

Смешанная отладка не поддерживается в 64-битном режиме (по состоянию на Visual Studio 2008).

2 голосов
/ 12 сентября 2008

Для всех, кто использует WinDbg:

1> Настройка символов

Посмотрите на эти команды. (Справка: в консоли .hh <команда>)

.sympath
.sympath+ 
.symfix

2> Установить исходный путь

.srcpath

3> Загрузить расширение SOS для отладки программ управляемого / смешанного режима.

(Убедитесь, что у вас правильно настроены пути расширения)

Добавьте Microsoft.NET \ Framework \ v2.0.50727 для x86, используя-

.extpath 

Установить точку останова для загрузки clr.

sxe ld:mscorwks

(F5 / г) (Ожидание ModLoad BP на mscorwks.dll)

Убедитесь, что у вас уже нет загруженного дубликата SOS. Смотрите:

.chain

Теперь мы готовы загрузить расширение SOS. :)

.loadby sos mscorwks

4> Перезагрузить все символы ..

.reload

Теперь все готово:)

(YMMV) * ​​1034 *

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