异常处理和软件异常
1.理解异常过虑器表达式
__try
{//some code}
__except(过虑器表达式)
{//code for exception handling}
2.过虑器表达式的值
值只能为以下三种的一个
(1) EXCEPTION_EXECUTE_HANDLER
程序中遇到异常后,会立刻__except中的代码,然后接着__except块后的代码继续执行。
(2) EXCEPTION_CONTINUE_EXECUTION
程序中遇到异常后,会立刻__except中的代码,然后跳回__try中发生异常的代码处,重新执行产生异常处的代码。
(3) EXCEPTION_CONTINUE_SEARCH
程序中遇到异常后,__except中的代码不会被执行,而是寻常外层__try所对应的__except。
SetUnhandledExceptionFilter
设置全局异常处理代码。若程序中的代码在执行时产生异常,且无相应的异常处理代码,
那么系统会自动调用用户设置的全局异常处理代码处理这些异常。
C/C++程序在启动时,会自动安装一个异常处理函数UnhandledExceptionFilter
注:SetUnhandledExceptionFilter(NULL),会重新把UnhandledExceptionFilter置为全局异常处理函数
举例
LONG WINAPI TopLevelUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
printf("This is global handler set by SetUnhandledExceptionFilter"n");
return 0?EXCEPTION_CONTINUE_EXECUTION :1?EXCEPTION_EXECUTE_HANDLER:EXCEPTION_CONTINUE_SEARCH;
}
int main()
{
SetUnhandledExceptionFilter(TopLevelUnhandledExceptionFilter);
__try{
int *p = NULL;
*p = 0;}
__except(EXCEPTION_EXECUTE_HANDLER)
{
printf(""nok");
}
printf("Recovered from exception handler"n");
return 0;
}