Как увидеть, где ловится исключение? - PullRequest
4 голосов
/ 21 августа 2009

Приложение MFC, C ++, над которым я работаю, похоже, создает исключение глубоко внутри драйвера устройства. (Это запись о нарушении прав доступа к нулевому указателю по внешнему виду. Однако детали сбоя меня сейчас не интересуют ...)

Я могу отключить отладчик Visual Studio при возникновении исключения в диалоговом окне «Исключения». Однако я хотел бы знать, где происходит исключение. Visual Studio может передать исключение отлаживаемой программе, но, похоже, в любом случае (насколько я знаю) нет ни единого шага для следующей инструкции, поэтому я могу просматривать стек вызовов с точки зрения обработчика исключений. 1003 *

Кто-нибудь знает, возможно ли перейти к обработчику исключений, который будет перехватывать исключение?

Ура, Джеймс

Ответы [ 2 ]

1 голос
/ 05 ноября 2013

С WinDbg вы можете использовать команду !exchain. С !exchain -c он покажет ваши деструкторы C ++ и блоки catch. например,

Try block 0
Catch block  0, type:    module!my_exception `RTTI Type Descriptor'+0 (6071409c)
                handler: module!catch_block+582 (6063bcc2)

Затем вы можете установить точку останова с помощью bp 6063bcc2.

Я не знаю, как это сделать в Visual Studio.

0 голосов
/ 21 августа 2009

В момент, когда выдается исключение, у вас должен быть доступный стек вызовов в отладчике - просматривая каждый кадр стека от точки выброса до main, вы сможете найти первый кадр с блоком try/catch, заключающий вызов в следующую подпрограмму в кадре. Пока этот блок try/catch обрабатывает выбрасываемый тип исключения, он и будет там.

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