如何在Windows上禁用调试断言对话框?

Mat*_*man 17 c++ winapi visual-studio

我有一堆单元测试,我在批处理模式下运行.有时候,一个会因为从Visual C++库触发的调试断言而崩溃.这会导致弹出一个对话框,单元测试将停止运行,直到我单击"确定"关闭对话框.

如何让C++程序在遇到断言时崩溃(比如在Linux上),而不是弹出讨厌的对话框?

注意:我不想禁用断言; 只是对话框.

Her*_*bob 13

看看_CrtSetReportHook():

http://msdn.microsoft.com/en-us/library/0yysf5e6.aspx

MSDN将此广告宣传为应用程序处理CRT运行时故障(如断言)的强大方法.据推测,您可以定义一个转储进程的报表挂钩:

如何在崩溃时为我的进程创建minidump?


Kin*_*gon 11

此代码将禁用对话框的显示.相反,它将在输出窗口和stderr中打印错误.

int main( int argc, char **argv )
{
     if( !IsDebuggerPresent() )
     {
          _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG );
          _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );
     }

     ...
}
Run Code Online (Sandbox Code Playgroud)