我使用Hudson作为持续集成服务器来测试C / C ++代码。不幸的是,我有一个导致内存损坏的错误,所以在某些Windows机器上,我有时会得到一个“应用程序错误”对话框,说明一条指令引用了无法读取的内存。弹出此对话框并基本挂起测试运行,因为它需要手动干预。
有没有办法阻止此对话框出现,以便测试运行完全失败并在Hudson中报告?
是否可以自动生成小型转储而不是显示对话框?
答案 0 :(得分:11)
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,那么有两组值。通常的注册表位置中的那些以及Wow6432Node
中HKLM
项下的那些位置。要同时更新两者,请从drwtsn32.exe -i
和%SYSTEMROOT%\system32
运行%SYSTEMROOT%\SysWOW64
。
答案 3 :(得分:1)
通过以下方式禁用错误报告:
答案 4 :(得分:1)
您可以使用各种_CrtSetReport函数来控制C / C ++运行时响应各种错误的方式(_CrtSetReportHook,_CrtSetReportMode,_CrtSetReportFile,_CrtSetReportHook2)
答案 5 :(得分:-2)
使用try / catch语句捕获异常并按照您希望的方式处理它。