在我的代碼的某些部分拋出了 C 訪問沖突錯誤。我想“抓住”它并記錄故障線路,以便我可以進一步調查。我嘗試了此執行緒中的第一個答案: 捕獲訪問沖突例外?
不幸的是到目前為止沒有運氣。我在 Visual Studio 2019 中使用除錯模式。有人知道如何記錄故障行嗎?
uj5u.com熱心網友回復:
您所指的“訪問沖突”不能在格式良好的代碼中發生。它始終是未定義行為的結果。
當這種情況發生時,程式的狀態是未知的,并且以某種未指定和未知的方式被破壞。您不能再期望在程式中完成任何有意義的任務,因為程式的狀態不再為人所知。我想如果作業系統保護程式的代碼段只讀,你可以依賴實際代碼完整的事實,但堆疊處于未知狀態,你可以忘記堆,它的狀態是完全未知的.
從有缺陷的程式中提取任何有用的診斷資訊的唯一有意義的方法是使用外部除錯器從外部角度分析和檢查當時程式狀態的凍結快照。
uj5u.com熱心網友回復:
在 Windows 上,您可以使用__try... 來完成__except,如下面的簡化示例所示:
__try
{
* (int *) 0 = 0;
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
std::cout << "Exception caught\n";
}
Microsoft 將這種機制稱為“結構化例外處理”,它比 Unix 上的信號強大得多(而且確實可用),如果您想做這種事情,我鼓勵您了解更多資訊:
https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement?view=msvc-170
我用它來捕獲表現不佳的 ASIO 驅動程式中的例外,否則會導致我的應用程式崩潰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/370765.html
