LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(
__in LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter
);
设置异常捕获函数. 当异常没有处理的时候,系统就会调用SetUnhandledExceptionFilter所设置异常处理函数.
即:执行代码引起的异常或者代码throw出的异常,没有对应的catch代码时,便会由该函数处理。
这是进程内最后一次处理异常的机会,默认函数的不做处理,引发异常,结束进程。
LONG WINAPI UnhandledExceptionFilter( __in struct _EXCEPTION_POINTERS* ExceptionInfo );
在进程入口处设置该异常处理函数,如 main() 函数刚开始时。
该函数有两个返回值:
EXCEPTION_CONTINUE_SEARCH 0x0 The process is being debugged, so the exception should be passed (as second chance) to the application's debugger. EXCEPTION_EXECUTE_HANDLER 0x1 If the SEM_NOGPFAULTERRORBOX flag was specified in a previous call to SetErrorMode, no Application Error message box is displayed. The function returns control to the exception handler, which is free to take any appropriate action.
异常捕获函数有三种返回值
EXCEPTION_EXECUTE_HANDLER:表明异常处理完毕,程序可以退出
EXCEPTION_CONTINUE_EXECUTION:忽略此异常,从异常点继续运行。如果此时再发生异常,还会调用异常处理函数
EXCEPTION_CONTINUE_SEARCH:异常没被识别,交由上一级处理函数处理;
不同的返回值,程序会对异常做不同的处理,或结束或继续。
常在该函数内记录异常log,或者生成dump文件,记录异常环境,方便后期调试。
如果程序被调试器附加。调试器将优先于SetUnhandledExceptionFilter设置的异常处理函数处理异常
生成dump文件方法,将下篇文章介绍。