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

时间:2009-04-09 17:32:32

标签: c++ windows debugging memory build-automation

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

有没有办法阻止此对话框出现,以便测试运行完全失败并在Hudson中报告?

是否可以自动生成小型转储而不是显示对话框?

6 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:8)

您还可以使用 SetErrorMode 执行此类程序。有关详细信息,请参阅this文章。

如何使用它的一个简单示例是执行以下操作:

SetErrorMode(GetErrorMode () | SEM_NOGPFAULTERRORBOX);

上面的'或'是当前模式与我们想要的添加。

答案 2 :(得分:2)

除了rkb所说的,如果你运行的是Windows XP 64bit,那么有两组值。通常的注册表位置中的那些以及Wow6432NodeHKLM项下的那些位置。要同时更新两者,请从drwtsn32.exe -i%SYSTEMROOT%\system32运行%SYSTEMROOT%\SysWOW64

答案 3 :(得分:1)

通过以下方式禁用错误报告:

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

答案 4 :(得分:1)

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

答案 5 :(得分:-2)

使用try / catch语句捕获异常并按照您希望的方式处理它。