異常處理和軟件異常 -- 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;

   

}

 

 

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