C++/MFC try catch 異常捕獲不到

try

{

BYTE *pch;

pch = (BYTE *)01234; //非法地址

 

*pch = 5;

}

catch (...)

{

AfxMessageBox("捕獲異常");

}

 

但在Release方式下如果選擇了編譯器代碼優化選項,則 VC編譯器會去搜索try塊中的代碼, 如果沒有找到throw代碼,他就會認爲try catch結構是多餘的, 給優化掉。上述代碼中的異常不能被捕獲,從而迫使程序彈出錯誤提示框退出。

 

如改成__try, __except結構,異常即可捕獲。

 

而是Windows平臺特有的擴展。如果在使用過程中涉及局部對象析構函數的調用,則會出現C2712 的編譯錯誤。

 

仍然使用C++標準的try{}catch(..){}, 在編譯命令行中加入 /EHa 的參數。VC編譯器不會把try catch模塊給優化掉。

 

Project->Seting->C/C++ Project Options: 添加 /EHa

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