停止MSVC ++debugging错误阻止当前进程?

Windows上的任何失败的ASSERT语句导致下面的debugging消息出现并冻结应用程序执行。 我意识到这是预期的行为,但它是定期运行在无头机器上,以防止unit testing失败,而是无限期地等待用户input。

有没有一个registry项或编译器标志,我可以用来防止这个消息框请求用户input,同时仍然允许在ASSERTtesting失败?

基本上,我想这样做,而不修改任何代码,只是改变编译器或Windows选项。

谢谢!

Microsoft Visual C ++debugging库ASSERT http://img519.imageshack.us/img519/853/snapshotbu1.png

从MSDN关于ASSERT宏:

在MFC ISAPI应用程序中,调试模式下的断言将弹出一个模态对话框(ASSERT对话框现在默认为模态)。 这会中断或挂起执行。 要抑制模态断言对话框,请将以下行添加到项目源文件(projectname.cpp)中:

// For custom assert and trace handling with WebDbg #ifdef _DEBUG CDebugReportHook g_ReportHook; #endif 

完成此操作后,可以使用WebDbg工具(WebDbg.exe)查看断言。

我认为这是_CrtDbgReport为_CRT_ASSERT类型的报告显示的对话框。 使用_CrtSetReportHook,您可以为整个应用程序定制该行为。 (即需要一个本地更改)特别是,可以在断言失败后继续执行,因此忽略它。

在单元测试的上下文中,将ASSERT(实际上是_CrtDbgReport调用)转换成一些异常,通常是一个包含一些信息性文本的std :: exception是很好的。 这往往会导致单元测试的输出日志失败。 这正是你想要的:一个失败的ASSERT应该是一个失败的单元测试。

通过抛出你的报告钩子函数来做到这一点,如下所示: _CrtSetReportHook()