我们有一个遗留构建基础架构,用于夜间构建(在Perl中实现),用于编译,链接和单元测试我们的应用程序/插件。在Windows上,如果单元测试过程崩溃,则会弹出一个“锁定”构建场的模态对话框。
是否有办法(win32 API调用,系统配置,env var,某些东西......)禁用此行为以使子进程在崩溃时立即终止,而不使用模态对话框和非零退出状态?
谢谢, - DD
PS:我们在Windows上使用SEC(结构化异常处理)进行编译,以便能够使用catch(...)“捕获”崩溃,因此在大多数情况下避免此问题,但有时这还不够,因为当然,一些崩溃是不可恢复的(例如,如果它们损坏了堆栈)。答案 0 :(得分:6)
根据谁抛出对话框,您可能需要结合多种方法。
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
...将关闭一组对话框。
答案 1 :(得分:3)
您需要添加一个捕获所有异常的“未处理的异常处理程序”:在初始化代码中调用SetUnhandledExceptionFilter(handler),它将调用处理程序例程。真的很简单。
我使用旧文章中的示例代码,包含一个名为minidumper的文件,调用公开的函数,然后就完成了。
Here's some more example code,会弹出一个不同的对话框,但您可以将其更改为只是将消息写入日志文件或类似文件。
如果您正在编写纯.NET应用程序,那么您将对this article更感兴趣。
答案 2 :(得分:0)
如果您将单元测试作为子进程运行,它不应该阻止您的构建机器人,但是:如果单元测试用例失败,您不应该继续构建过程。
答案 3 :(得分:0)
答案 4 :(得分:0)
我仍然使用名为RTVReco的旧程序。它只是一个推动应用程序的按钮,非常容易使用。它暂时没有更新,但它仍然是我见过的最容易的。