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文件方法,将下篇文章介绍。

posted on 2013-01-06 13:51  布丁嫩  阅读(1693)  评论(0编辑  收藏  举报