可以禁用“应用程序错误”对话框吗?

我使用Hudson作为持续集成服务器来testingC / C ++代码。 不幸的是,我有一个导致内存损坏的错误,所以在一些Windows机器上,我有时会得到一个“应用程序错误”对话框,解释一个指令引用了无法读取的内存。 这个对话框popup并基本挂起testing运行,因为它需要手动干预。

有没有办法来防止这个对话框出现,以便testing运行只是失败,并在哈德逊报告?

是否有可能自动生成一个小型转储,而不是显示对话框?

  1. 像Gently先生所建议的那样,使用“禁用错误报告”。 参见这个PC世界文章 。
  2. 如果您碰巧在您的构建机器上安装了MS Visual Studio,它将捕获应用程序错误并弹出一个对话框。 要禁用这些对话框(以及Visual Studio的即时调试功能),请运行命令drwtsn32.exe -i将Dr. Watson设置为默认的系统调试器。 沃森博士将生成一个核心转储并悄然退出。 (请参阅此Microsoft知识库文章: http : //support.microsoft.com/kb/q121434/ 。

你也可以使用SetErrorMode做类似这样的程序。 看到这篇文章的更多细节。

如何使用它的一个简单的例子是做到以下几点:

 SetErrorMode(GetErrorMode () | SEM_NOGPFAULTERRORBOX); 

上述“或”与我们所期望的添加的当前模式。

禁用错误报告

  • 注册表编辑 – 将您的应用程序添加到HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PCHealth \ ErrorReporting \ ExclusionList,或
  • 右键单击我的电脑,进入高级选项卡,并选择“禁用错误报告”选项,或
  • 您可以导航到管理工具中的服务控制台,找到错误报告服务,进入属性并禁用它

您可以使用各种_CrtSetReport函数来控制C / C ++运行时响应各种错误的方式(_CrtSetReportHook,_CrtSetReportMode,_CrtSetReportFile,_CrtSetReportHook2)

除了rkb所说的,如果你运行的是Windows XP 64bit,那么有两套值。 在通常的注册表位置和在HKLMWow6432Node键下的那些。 为了同时更新,从%SYSTEMROOT%\system32%SYSTEMROOT%\SysWOW64运行drwtsn32.exe -i

使用try / catch语句来捕获异常并按照你想要的方式处理它。