我有使用第三方庫的代碼。如何在C++中捕獲錯誤__try __except不能
該庫引發偶爾的訪問衝突異常。一個基本的try/catch沒有發現錯誤,程序很難崩潰。
我能夠使用__try __except來代替錯誤,記錄它,然後正常退出程序。
第三方剛剛更新了自己的圖書館,現在該是導致訪問衝突錯誤記錄的一小部分只是死在生產帶有「[程序名稱]已停止工作」
在Visual Studio中,當步進通過我得到「Microsoft Visual Studio C運行時庫已經在[程序名稱]中檢測到一個致命錯誤。」
我已經更新了我的__except語句來捕捉所有事情(或者我相信),它仍然會發生。
原始__except:
__except (eps = GetExceptionInformation(), ((GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_SEARCH)) {
sprintf("error message");
result = 99;
}
新__except:
__except (eps = GetExceptionInformation(), ((1 == 1)
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_SEARCH)) {
sprintf("error message");
result = 99;
}
感謝您的建議,我嘗試了 __except(EXCEPTION_EXECUTE_HANDLER) 結果與其他兩個相同。我已經問了第三方,但是他們的時間框架對於修復來說往往太長了,這就是爲什麼我必須首先處理他們的訪問衝突。 –
你有權訪問他們的符號和源代碼嗎?你能夠在他們的最終調試它來弄清楚異常是如何發生的嗎?如果即使使用__except(EXCEPTION_EXECUTE_HANDLER),異常也不會被捕獲,那麼我的直覺就是庫試圖處理異常,所以你的代碼永遠不會得到它。 –
不幸的是我沒有訪問權限。我對開發者提出了一個問題,引用了示例記錄的行爲,以及新行爲之前/之後的版本號,聽起來像我可能會被卡住,直到我聽到回聲。感謝您的幫助。 –