Geo*_*Geo 8 windows exception-handling
如果我运行一个抛出异常的可执行文件(内置调试),我将收到一个错误对话框,说"Debug assertion failed",然后是一些有关异常的信息.发生这种情况时,程序的执行暂停,直到我选择"中止","重试"或"忽略"选项之一.
问题是,我从脚本运行了很多应用程序,如果其中一个引发异常,它会暂停我的脚本,直到它被处理完毕.
有没有办法禁用这种异常处理机制?
编辑:我记得刚才读到一个注册表项,这将禁用出现的错误消息.有谁知道吗?
如果您可以修改应用程序的源代码,请查看 _CrtSetReportMode 函数,例如:
_CrtSetReportMode(_CRT_ASSERT, 0);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅msdn。
如果您可以修改源,则需要修改中止行为(由断言调用)以抑制中止/重试/忽略对话框。
中止时,仍会生成故障转储(默认情况下),因此您不会丢失重要内容。
此外,您可以调整断言行为以仅写入 stderr。如果中止行为足以满足您的要求,则不需要这样做。注意:_Crtxxx 调用仅在调试版本 (/Zi) 中有效。
禁用中止/重试/忽略的最小更改。取消注释 _Crt 调用并包含 crtdbg.h 以修改调试模式构建中的断言行为。
#include <stdlib.h>
//#include <crtdbg.h>
int main(int argc,char **argv);
int main(int argc,char **argv)
{
// ON assert, write to stderr.
//_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
//_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );
// Suppress the abort message
_set_abort_behavior( 0, _WRITE_ABORT_MSG);
abort();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4222 次 |
最近记录: |