我有一堆以批处理模式运行的单元测试。有时,会因 Visual C++ 库中触发的调试断言而崩溃。这会导致弹出一个对话框,并且单元测试停止运行,直到我单击“确定”关闭对话框。
如何让 C++ 程序在遇到断言时崩溃(就像在 Linux 上一样),而不是弹出烦人的对话框?
注意:我不想禁用断言;只是对话框。
我有一堆以批处理模式运行的单元测试。有时,会因 Visual C++ 库中触发的调试断言而崩溃。这会导致弹出一个对话框,并且单元测试停止运行,直到我单击“确定”关闭对话框。
如何让 C++ 程序在遇到断言时崩溃(就像在 Linux 上一样),而不是弹出烦人的对话框?
注意:我不想禁用断言;只是对话框。
查看 _CrtSetReportHook():
http://msdn.microsoft.com/en-us/library/0yysf5e6.aspx
MSDN 将其宣传为应用程序处理 CRT 运行时故障(如断言)的一种稳健方式。大概您可以定义一个转储您的进程的报告挂钩:
此代码将禁用对话框的显示。相反,它将在输出窗口和 stderr 中打印错误。
int main( int argc, char **argv )
{
if( !IsDebuggerPresent() )
{
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG );
_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );
}
...
}
_CRT_ERROR
如果您Q_ASSERT
从Qt
库中使用,则必须申请相同的内容。
我将合适的钩子的代码(您可以使用 _CrtSetReportHook() 安装)放在:https ://stackoverflow.com/a/28852798/2345997