我想知道是否有一種方法可以在引發例外時完全自動終止程式,而不必在出現的 Visual C 庫視窗上的“中止”、“重試”和“忽略”按鈕之間進行選擇?
.
(示例圖片)
有什么解決辦法嗎?(除了顯而易見的——修復我的代碼!)
uj5u.com熱心網友回復:
_OUT_TO_STDERR是的,您可以通過傳遞給來抑制訊息框_set_error_mode()。如果您仍然收到一個訊息框,告訴您abort()已呼叫并且您也想禁用它,您還需要呼叫_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG). 完整示例:
#include <cassert>
#include <cstdlib>
#include <crtdbg.h>
int main()
{
_set_error_mode(_OUT_TO_STDERR);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
assert(false);
}
uj5u.com熱心網友回復:
SetBreakOnAssert(false)以及您可以(并且必須)做的很多其他事情來防止這種情況發生。問題是存在許多不同型別的錯誤機制和錯誤視窗。
您發布的是一個 ASSERT,您可以使用 SetBreakOnAssert 禁用它。但是您仍然必須處理錯誤情況,即終止應用程式。還有其他情況會彈出默認的 Windows 對話框。
std::set_terminate允許您設定當程式的任何部分想要終止應用程式時呼叫的函式(例如由于雙重例外)。
_set_se_translator允許您指定可以將 Win32 例外(例如“訪問沖突”)轉換為 C 例外的函式。
_set_invalid_parameter_handler允許您指定在程式呼叫帶有無效引數的 std 函式時呼叫的函式。(我認為越界檢查屬于該類別)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/445810.html
