程序是由代码编译出来的,而代码是由人写的。人非圣贤,孰能无过。所以由人写的代码有缺陷是很正常的。当然很多异常都在开发阶段被考虑到而添加了处理代码,或者用try/catch对可能出现异常的地方进行额外的照顾。可是,还是会有一些无法预料的异常(Unhandled Exception)在程序运行的时候出现。这些异常很多时候都会招致程序的崩溃。那么有没有什么方法可以让程序在崩溃的时候体面的退出呢?答案是肯定的。可以用Windows API中的SetUnhandledExceptionFilter来设置一个回调函数来处理这些无法预料的异常。
要想使用SetUnhandledExceptionFilter,必须#include <Windows.h>,这个函数的声明如下:
具体的参数和返回值的解释可以查找MSDN,有很详细的说明。下面就用具体的代码来说明怎样使用这个Windows API来使程序在崩溃的时候体面的退出。代码里面有详细的注释来帮助理解。
用VC创建一个名为Test的控制台程序,添加下面的代码。
编译上面的代码,到工程的Debug目录下找到编译好的Test.exe,双击运行,在Windows 7下就会出现下面的对话框告诉你程序无法运行,也就是崩溃了。
为了避免出现程序崩溃的情况,用前面所说的方法,把代码修改成下面这样。
编译上面的代码,到工程的Debug目录下找到编译好的Test.exe,双击运行,就会出现下面这样的对话框,点击OK按钮后,程序正常退出。
分享到:
相关推荐
在使用eclipse的时候,有时候会弹出一个方框,里面的内容是Unhandled event loop exception No more handles,当你点击OK的时候,又会出来一个方框,里面第一句话是 An SWT error has occurred,并且诱导你关闭...
WPF全局异常捕获Demo,防止程序运行过程中出现异常崩溃
解决MAX-VR渲染跳出及弹出UNHANDLED EXCEPTION内存分配失败.docx解决MAX-VR渲染跳出及弹出UNHANDLED EXCEPTION内存分配失败.docx
在snmp++的MFC编程中,调试运行到Snmp snmp(status,0,false);语句时总是出现这个错误。Unhandled exception in xxx.exe(NTDLL.DLL):0xC0000005:Access Volation该怎么解决呢?
Eclipse运行TOMCAT 出现在a java exception has occurred的解决办法。
"java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver" 解决方案 [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 解决了jsp连接 sql server 2000的问题
PotPlayer是世界上最好最强大的影音播放器
在调用List.first 时报出该异常 看一下List 中get first方法的源码: /** * Returns the first element. * * Throws a [StateError] if `this` is empty. * Otherwise returns the first element in the ...
问题1:Unhandled exception at 0x00007FFDB39AA839 in TesseractLACadd1.exe: Microsoft C++ exception: boost::filesystem::filesystem_error at memory location 0x000000EAFABFEED0. 解决方案:我只能说,这个的...
在精简pyinstaller打包后的exe时,出现 Failed to execute scripte app 问题。无法定位到具体问题。 使用命令 出现问题命令: pyinstaller -Fw app.py 然而,通过vscode运行,或者python app.py并没有报错,推测...
但是由于这个提示框导致我们的第三方守护程序并不知道应用已经崩溃退出,导致我们无法及时处理。 所以,我们应该在程序启动时再做一个处理,即添加未处理异常的事件 C#: AppDomain.CurrentDomain....
崩溃报告者.NET 将使用 .NET Framework 开发的经典桌面应用程序...使用代码Windows 窗体应用程序您需要做的第一件事是在Program.cs文件中订阅Application.ThreadException和AppDomain.CurrentDomain.UnhandledException
前一章讨论了当一个异常过滤器返回 E X C E P T I O N _ C O N T I N U E _ S E A R C H时会发生什么事 情。返回EXCEPTION_CONTINUE_SEARCH 是...在这种情况下,就出现了所谓的“未处理异常”(Unhandled exception)。
2020-02-03 06:37:24.635 [Error] An unhandled exception has occurred while executing the request./Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareSystem.Data.SqlClient.Sq
yarn add @ladjs/graceful用法当调用graceful.listen()时,使用此程序包将绑定流程事件侦听器: process.on('warning') -将通过config.logger.warn输出process.on('unhandledRejection') -将通过config.logger....
OPENCV配置问题
不切分视图的情况下,添加上去是正常的,但是切分之后出现:Debug Assertion Failed!错误。 ... program: e:\....Controltest2.exe ...Unhandled exception in controltest2.exe(mfc42d.dll):0xc0000005:access violation.
sembly 'Microsoft.ReportViewer.WinForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 系统找不到指定的文件。 File name: 'Microsoft.ReportViewer....
Sitecore Hackathon 2021 必须阅读:⟹<<
Unhandled exception at 0x0001104c in testMessageBox.exe: 0xC0000005: 写入位置 0x00000000 时发生访问冲突. 程序“[0xCF3A88CA] testMessageBox.exe”已退出,返回值为 1067 (0x42b)。 这样的错误 你只要把 PC...