我在Windows上寫的一段代碼:
__try {
foo_fun();
} __exception (EXCEPTION_EXECUTE_HANDLER) {
// write some log...
}
其中foo_fun()是一段可能會發生記憶體訪問越界的代碼。但是在我們測驗同學的一臺電腦上發現生成了崩潰dump,結果是崩潰在了foo_fun()中;
按我的理解SEH應該可以捕獲所有軟硬體的例外的,這就有一點奇怪了。不知道大家對這塊兒了解不,歡迎討論一下。
uj5u.com熱心網友回復:
__exception (EXCEPTION_EXECUTE_HANDLER)只捕獲這種例外吧?
uj5u.com熱心網友回復:
不是的,這個意思是說__try里面的內容當作已知例外處理。uj5u.com熱心網友回復:
測驗同學的那臺電腦配置是否比較低端?你使用的是系統底層除錯例程,如果回應超時有可能造成系統崩潰。這種例程應該是非常可靠的。uj5u.com熱心網友回復:
我看了一下,測驗的那臺電腦性能應該不算太低:0:094> !cpuid
CP F/M/S Manufacturer MHz
0 6,78,3 GenuineIntel 2300
1 6,78,3 GenuineIntel 2300
2 6,78,3 GenuineIntel 2300
3 6,78,3 GenuineIntel 2300
uj5u.com熱心網友回復:
那要看 foo_fun 中怎么處理的, 如果函式中也有 _try _except 捕捉例外,例外不一定傳遞給到上一級生成的 dump 一般可以復制到 原始編譯生成目錄下, 用VS打開F5除錯的, 如果生成時有.pdb 除錯符號檔案,可以看到奔潰處及呼叫堆疊,很容易追蹤到問題
或者可以在容易奔潰的機器上安裝遠程除錯器, 打開VS 除錯選單下的所以例外, 遠程除錯下
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/238203.html
標籤:基礎類
上一篇:如何令位圖部分透明?
下一篇:MFC MBCS Library for Visual Studio 2013 安裝無法繼續,因為某些必須組件失敗
