2 回答

TA貢獻1757條經驗 獲得超7個贊
程序運行過程中產生的異常一般是由程序自身處理
程序自身不處理 且調試器也不處理的
操作系統將調用默認的全局異常處理函數來處理異常
這個全局函數是可以更改的
更改辦法是調用函數:SetUnhandledExceptionFilter

TA貢獻1794條經驗 獲得超8個贊
這個里面涉及的問題可能比較多?
如果你使用SEH(結構化異常處理)那么你可以捕獲絕大多數的異常,但是在結構化異常處理是不能和確定性資源清理一起使用的使用的,簡單的說你不能像這樣去定義一個對象
A a;
使用關鍵字
__try
__except
__finally
你可能需要下面兩個函數
GetExceptionCode
GetExceptionInformation
這是2個例子
DWORD FilterFunction()
{
printf("1 "); // printed first
return EXCEPTION_EXECUTE_HANDLER;
}
VOID main(VOID)
{
__try
{
__try
{
RaiseException(1, // exception code
0, // continuable exception
0, NULL); // no arguments
}
__finally
{
printf("2 "); // this is printed second
}
}
__except ( FilterFunction() )
{
printf("3\n"); // this is printed last
}
}
BOOL SafeDiv(INT32 dividend, INT32 divisor, INT32 *pResult)
{
__try
{
*pResult = dividend / divisor;
}
__except(GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
return FALSE;
}
return TRUE;
}
最后再提醒你,__try只能和__except或者(注意這里是“或者”)__finally連用,不能__try{...}__except(){...}__finally{...}這樣使用
- 2 回答
- 0 關注
- 156 瀏覽
添加回答
舉報