如何查看异常被捕获的位置?

时间:2009-08-21 14:31:30

标签: visual-studio exception-handling debugging

我正在研究的MFC,C ++应用程序似乎在设备驱动程序内部引发异常。 (这是一种访问冲突,从事物的外观写入NULL指针。崩溃的细节不是我现在感兴趣的,但是......)

我可以通过“例外”对话框让Visual Studio Debugger在异常发生时中断。我想知道的是异常被捕获的地方。 Visual Studio可以将异常传递给正在调试的程序,但似乎没有(我知道)单步执行下一条指令,因此我可以从异常处理程序的角度查看callstack。 / p>

有没有人知道是否可以步入异常处理程序来捕获异常?

干杯, 詹姆斯

2 个答案:

答案 0 :(得分:1)

使用WinDbg,您可以使用!exchain命令。使用!exchain -c,它将显示您的C ++析构函数和catch块。 e.g。

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中这样做的方法。

答案 1 :(得分:0)

在抛出异常时,你应该在调试器中有一个调用堆栈 - 通过查看从抛出点到main的每个堆栈帧,你应该能够找到第一帧,其中try/catch块将调用包装到帧中的下一个例程。只要try/catch块处理抛出的异常类型,那就是它将要落地的地方。