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