未处理的Win32异常

时间:2010-07-07 07:25:59

标签: c++ exception-handling win32exception

在运行时,当myApp.exe崩溃时,我收到“Unhandled Win32 exception”,但我怎么知道发生了哪个异常?哪里出了问题?

4 个答案:

答案 0 :(得分:2)

对于Native C ++应用程序,请参阅我之前的答案:Detect/Redirect core dumps (when a software crashes) on Windows用于捕获未处理的异常(还提供了用于创建崩溃转储的代码,您可以使用该代码来分析崩溃。如果崩溃发生在然后在Visual Studio中开发一个系统(我假设你正在使用它,如果不是其他IDE会有类似的东西),在Debug / Exceptions中勾选'Win32 Exceptions'的'Thrown'框。

答案 1 :(得分:1)

通常,Windows也会为您提供几个十六进制数字。有可能异常代码为0xC0000005。这是访问冲突的代码。当发生这种情况时,您还将有三个额外的信息位:违规地址,违规地址和违规类型(读取,写入或执行)。

Windows不会进一步缩小范围,而且通常无论如何都不会。例如,如果你走过程序中数组的末尾,Windows很可能不会意识到你甚至在数组上进行迭代。它只是看到“读:好,读:好,读:超出界限=>页面错误=>访问违规”。您必须从违规地址(您的数组迭代代码)和违反的地址(数组后面的越界地址)中找出答案。

答案 2 :(得分:0)

如果是.Net应用程序,您可以尝试为UnhandledException事件添加一个处理程序。您可以找到有关它的更多信息以及一些示例代码here

一般情况下,这是一个很好的迹象,表明您的异常处理已被破坏,因此可能值得通过您的代码查找可以抛出的地方但不处理异常的地方。

答案 3 :(得分:0)

使用调试器。您可以运行该程序,并查看引发应用程序的异常抛出的异常。它可能能够精确定位投掷的位置。我没有使用VS调试器,但是在gdb中你可以使用catch throw在抛出异常时强制断点,应该有类似的东西。