繁体   English   中英

未处理的Win32异常

[英]Unhandled Win32 exception

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

对于Native C ++应用程序,请参阅我之前的答案: 在Windows上检测/重定向核心转储(当软件崩溃时)以捕获未处理的异常(这也提供了用于创建崩溃转储的代码,您可以使用该代码来分析崩溃。如果崩溃发生在开发系统上然后在Visual Studio中(我假设你正在使用它,如果不是其他IDE会有类似的东西),在Debug / Exceptions中勾选'Win32 Exceptions'的'Thrown'框。

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

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

如果它是.Net应用程序,您可以尝试为UnhandledException事件放入一个UnhandledException 您可以在此处找到有关它的更多信息和一些示例代码。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM