如何分析VS2010在调试模式下捕获的未处理异常?

时间:2012-03-01 08:43:49

标签: c++ visual-studio-2010 debugging exception

我的C ++程序抛出在程序中未处理的异常,因此在调试模式下,VS处理它,显示一个窗口,显示未处理的异常发生的事实。但我可以查看此异常,这是未处理的吗?它的类型是什么,对象内部是什么?

3 个答案:

答案 0 :(得分:3)

你可以尝试击中Break并踩进去。如果要以代码方式分析任何内容,那么VS将进入处理程序或异常类的构造函数。无论如何,这就是我在VS2010中的表现。

从那时起,如果您必须知道异常对象的地址,那么您应该能够将其粘贴到Watch窗口并转换为基本异常类(如果异常不是系统异常而且您'我们有一个良好的阶级等级。)

P.S。 您可以拥有自己的未处理异常例程来设置其中的断点。可以这么简单:

// global scope
    LONG WINAPI my_unh_exc_hndlr(_EXCEPTION_POINTERS* excPtrs)
    {
        return EXCEPTION_CONTINUE_SEARCH; // Put a breakpoint here in IDE.
    }

// ... somewhere in the beginning of main()
    SetUnhandledExceptionFilter(my_unh_exc_hndlr);

每次遇到未处理的异常时都应该运行。

另一个程序随机崩溃?没有可用的来源?没问题。注入代码(小DLL),为您设置处理程序例程(除非您拥有较少的权限)和调试。

答案 1 :(得分:0)

在大多数情况下,当发生异常时,Visual Studio应该打开一个对话框,其中包含破坏程序的选项,使您可以查看代码中的位置。此外,您应该能够在异常发生之前分析对象,指针和诸如此类的值。这应该足以让我们知道出现了什么问题(除非你正在处理堆损坏或类似的东西)。如果不了解异常本身的细节,就很难说更多。

答案 2 :(得分:0)

如果您无法查看异常的所有信息,则可能需要在Visual Studio中检查调试设置。转到“调试”菜单并单击“例外”...从那里,您可以选择中断所有例外。这应该会在异常发生时尽快强制调试器中断。