最近在編寫C++程序時,瑞然在能夠出錯的地方都使用了try...catch處理,可是程序總是靜靜地退出,從外部的進程查詢它的退出碼,結果是0xc0000417,在網上搜索了一下,原來是“未知軟件錯誤”。
那這個異常是誰拋出來的呢?我到VS的安裝目錄去找0xc0000417,結果在ntstatus.h找到定義:
//
// MessageId: STATUS_INVALID_CRUNTIME_PARAMETER
//
// MessageText:
//
// An invalid parameter was passed to a C runtime function.
//
#define STATUS_INVALID_CRUNTIME_PARAMETER ((NTSTATUS)0xC0000417L)
原來是非法句柄錯誤,但我又沒有用_set_invalid_parameter_handler設置處理回調函數(shù)。
這樣C++框架發(fā)現(xiàn)了這一情況,就調用了_invoke_watson函數(shù),它把UnhandledExceptionFilter重設(導致程序一開始設置的UnhandledExceptionFilter不可用),然后調用默認的UnhandledExceptionFilter之后,就TerminateProcess結束進程,這就是為什么程序總是靜靜地退出了。
|
新聞熱點
疑難解答
圖片精選