在可能在无人值守的构建机器上运行的单元测试中,“unittest.exe已停止工作”并且调试中断时会弹出其他对话框并不好。我已经使用以下函数来抑制大部分函数,SetUnhandledExceptionFilter
,signal
等等,以安装打印失败测试的处理程序和堆栈跟踪。
_set_abort_behavior(0, _WRITE_ABORT_MSG); // Disable abort message.
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); // CRT asserts go to stderr.
_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); // CRT asserts go to stderr.
不幸的是,我发现在发生错误后打印消息或堆栈跟踪时,有时会检测到堆损坏,这会导致“unittest.exe已停止工作”对话。这已经在我未处理的异常过滤器中了,所以可以理解的是它不能再调用它了!
有没有办法抑制这种行为,而只是直接退出自定义错误代码?或者也许是一种更聪明的方法来处理这种情况?