异常处理和软件异常 -- SetUnhandledExceptionFilter

异常处理和软件异常

 

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;

   

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章