記錄一個try catch沒有生效的原因,以便備忘

爲了測試方便,直接建立的MFC對話框工程,直接選擇Release編譯。在代碼中測試發現,添加了try catch之後,運行程序出現異常時仍然報錯,而沒有catch到,也沒有進入catch的處理。

測試代碼如下,在一個按鈕的響應函數中做的:

void CTestMFCDlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知處理程序代碼
	OutputDebugStringA("\n進入函數\n");
	try
	{
		char* pChar = NULL;
		OutputDebugStringA("進入try,準備異常操作\n");
		strcpy(pChar,"1");
		OutputDebugStringA("try中,異常操作已經發生了,輸出此語句表明沒有進入catch\n");
	}
	catch(...)
	{
		OutputDebugStringA("catch中捕捉到異常\n");
	}

	OutputDebugStringA("try catch中外面的語句,此時異常處理已經結束了\n");
}

編譯運行,不管是調試運行還是直接雙擊exe運行,都沒有進入到catch的處理中。原因在於工程的設置,如圖

 

[啓用C++異常一項],默認是第二項【是(/EHsc)】,修改爲第三項【是,但有 SEH 異常(/EHa)】,如圖

再編譯運行,OK,一切如自己設計的那樣,正常捕獲並處理,程序沒有崩潰!

原創文章,隨意轉載。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章