我有一堆單元測試,我在批處理模式下運行。偶爾,一個會從Visual C++庫中觸發一個調試斷言而崩潰。這會導致一個對話框彈出,單元測試停止運行,直到我點擊「確定」關閉對話框。如何在Windows上禁用調試斷言對話框?
如何讓C++程序在碰到斷言時崩潰(如在Linux上),而不是彈出煩人的對話框?
注意:我不想禁用斷言;只是對話。
我有一堆單元測試,我在批處理模式下運行。偶爾,一個會從Visual C++庫中觸發一個調試斷言而崩潰。這會導致一個對話框彈出,單元測試停止運行,直到我點擊「確定」關閉對話框。如何在Windows上禁用調試斷言對話框?
如何讓C++程序在碰到斷言時崩潰(如在Linux上),而不是彈出煩人的對話框?
注意:我不想禁用斷言;只是對話。
退房_CrtSetReportHook():
http://msdn.microsoft.com/en-us/library/0yysf5e6.aspx
MSDN通告此作爲一個應用程序來處理CRT運行時故障等斷言的可靠方式。想必你可以定義一個報告掛鉤,轉儲你的過程:
我把代碼一個合適的鉤子(您可以與_CrtSetReportHook()安裝):https://stackoverflow.com/a/28852798/2345997
此代碼將禁用顯示對話框。相反,它會在輸出窗口和stderr中輸出一個錯誤。
int main(int argc, char **argv)
{
if(!IsDebuggerPresent())
{
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
}
...
}
爲什麼反對票? – KindDragon
謝謝!你救了我的命!! – YukiNyaa
太好了 - 正是我在找的東西。 –