Неуправляемый стек вызовов в приложении c # - PullRequest
2 голосов
/ 18 января 2012

Я получаю сообщение об ошибке доступа в неуправляемой dll, которую я пишу, но когда я пытаюсь отладить его в приложении c #, он получит только последний кадр стека вызовов в окне отладки Visual Studio.

У меня отладка-> исключения-> System.AccessViolationException, установленная для прерывания отладчика при его выбросе.

myunmanaged.dll!ViolatingFunc() Line 100 + 0xc bytes
- - - -
[external code] //myunmanaged.dll!function that I want to see
- - - -
somecsharp.exe!com.somewhere.Form1.CallFuncThatCallsViolator();

Я надеялся пройтись по неуправляемому стеку, чтобы увидеть, куда данные превращаются в garbeldegook. Это возможно?

Ответил enter image description here

Включение неуправляемой отладки - это шаг 1, но, чтобы полностью разобраться в этом, я включил символы Microsoft.

, который сделал мой след стека похожим на это:

myunmanaged.dll!ViolatingFunc() 
- - - -
myunmanaged.dll!SomeFunc2() 
- - - -
myunmanaged.dll!SomeFunc()
- - - -
[managed to unmanaged code transition]
- - - -
somecsharp.exe!com.somewhere.Form1.CallFuncThatCallsViolator();

1 Ответ

6 голосов
/ 18 января 2012

Да, это так.Вам необходимо отладить ваше приложение в «смешанном режиме».Щелкните правой кнопкой мыши по проекту, выберите вкладку «Отладка» и установите флажок «Включить отладку неуправляемого кода».Вы увидите управляемые и собственные кадры.

mixed mode debugging

Редактировать : поскольку ChrisO упоминает об отсутствии символов MS, это может сделать странную отладку странной.Добавьте следующий путь к символам для символов Windows: http://msdl.microsoft.com/download/symbols

...