最近在編寫C++程序時(shí),瑞然在能夠出錯(cuò)的地方都使用了try...catch處理,可是程序總是靜靜地退出,從外部的進(jìn)程查詢它的退出碼,結(jié)果是0xc0000417,在網(wǎng)上搜索了一下,原來(lái)是“未知軟件錯(cuò)誤”。
那這個(gè)異常是誰(shuí)拋出來(lái)的呢?我到VS的安裝目錄去找0xc0000417,結(jié)果在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)
原來(lái)是非法句柄錯(cuò)誤,但我又沒(méi)有用_set_invalid_parameter_handler設(shè)置處理回調(diào)函數(shù)。
這樣C++框架發(fā)現(xiàn)了這一情況,就調(diào)用了_invoke_watson函數(shù),它把UnhandledExceptionFilter重設(shè)(導(dǎo)致程序一開(kāi)始設(shè)置的UnhandledExceptionFilter不可用),然后調(diào)用默認(rèn)的UnhandledExceptionFilter之后,就TerminateProcess結(jié)束進(jìn)程,這就是為什么程序總是靜靜地退出了。
新聞熱點(diǎn)
疑難解答
圖片精選