vc中異常捕捉的最後一道屏障-SetUnhandledExceptionFilter
在C++中定義了很多異常捕捉機製,但是在VC中在win平台上有一個更高層的異常處理機製,函數SetUnhandledExceptionFilter,這個函數很有用,它是異常捕捉的最後一道屏障。它有這樣的規則,對於未捕捉的異常並且未在調試狀態下(通常就是隻在release中),將自動調用這裏麵的異常處理函數。
默認的異常處理函數就是彈出一個對話框,告訴你程序異常了,而在發布軟件時,你可以用其他函數替代,優雅的結束程序。這個處理函數的定義是這樣的:
LONG WINAPI myUnhandledExceptionFilter(_EXCEPTION_POINTERS* pExceptionInfo)
{
...
return
}
這個函數有三種返回值,來表示不同的程序行為:
EXCEPTION_EXECUTE_HANDLER |
Return from UnhandledExceptionFilter and execute the associated exception handler. This usually results in process termination. |
EXCEPTION_CONTINUE_EXECUTION |
Return from UnhandledExceptionFilter and continue execution from the point of the exception. Note that the filter function is free to modify the continuation state by modifying the exception information supplied through itsLPEXCEPTION_POINTERS parameter. |
EXCEPTION_CONTINUE_SEARCH |
Proceed with normal execution of UnhandledExceptionFilter. That means obeying theSetErrorMode flags, or invoking the Application Error pop-up message box. |
第一種就是悄悄的終止程序了
第二種就是從這個異常處繼續執行
第三種就是調用默認的方法,可能就是彈出一個框,當然這個默認的方法通常是遵循SetErrorMode 的模式。
其實標準C++中也有一個類似的函數set_unexpected,區別是,這個函數的執行情況比較有限製,隻是當C++ 函數拋出一個不在它自己參數列表中的異常時才會觸發,局限性比較大。
最後更新:2017-04-03 22:15:27