Как получить полную трассировку стека из разбитого смешанного режима exe / dll? - PullRequest
1 голос
/ 22 сентября 2009

Я написал приложение на C ++ / CLR. Он использует родной lib / dll. В редких случаях происходит сбой инсайдера этой родной DLL. Затем я получаю трассировку стека, но только до управляемой части, внутренняя нативная часть не учитывается. Есть ли способ, чтобы он отображал всю трассировку стека?

Я сделал следующий тест: я добавил строку кода в родную dll, которая всегда приводит к сбою. Когда я запускаю его, дважды щелкнув исполняемый файл, я получаю трассировку стека управляемой части, как и раньше. Если я запускаю его из VS2008 с подключенным отладчиком (просто нажимая F5), и он выходит из строя, я вижу всю трассировку стека, управляемую и неуправляемую части.

Так как ошибка actall случается так редко, я хотел бы добавить что-то в мое приложение, которое каким-то образом отображает всю трассировку стека без необходимости установки пользователями и запуска через VS. Есть ли способ сделать это?

Thx Marc

Ответы [ 2 ]

0 голосов
/ 21 февраля 2016

Это очень нетривиально, я могу порекомендовать вам следующие ссылки:

Быстрая трассировка стека захвата в Windows / 64-битном / смешанном режиме

Разрешить управляемую и собственную трассировку стека - какой API использовать?

Но то, что я попробовал - даже если вы используете определение стека, как это, - если вы получаете исключение на нативной стороне, оно будет распространяться как SEHException на управляемую сторону, а когда вы получите контроль на управляемой стороне - частично вызов стека уже потерян. (Родная часть). Можно определить собственный стек вызовов, когда возникает исключение, но это нужно записать еще.

Я мог бы выполнять эту работу в качестве фрилансера, если это необходимо.

0 голосов
/ 22 сентября 2009

Используя Sysinternals Process Explorer (http://technet.microsoft.com/de-de/sysinternals/bb896653.aspx),, вы можете посмотреть на стек любого запущенного в данный момент процесса. Возможно, это поможет вам ...

...