如果我运行一个抛出异常的可执行文件(内置调试),我将收到一个错误对话框,说“Debug assertion failed”,然后是一些有关异常的信息。发生这种情况时,程序的执行暂停,直到我选择“中止”,“重试”或“忽略”选项之一。
问题是,我从脚本运行了很多应用程序,如果其中一个引发了异常,它会暂停我的脚本,直到它被处理完毕。
是否有某种方法可以禁用此异常处理机制?
编辑:我记得前一段时间读过一个注册表项,这会禁止出现错误信息。有人知道吗?答案 0 :(得分:4)
答案 1 :(得分:3)
如果可以修改源,则需要修改中止行为(由assert调用)以禁止中止/重试/忽略对话框。
在中止时,仍会产生故障转储(默认情况下),因此您不会丢失重要信息。
此外,您可以调整断言行为以仅写入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;
}
答案 2 :(得分:1)
您可以将可执行文件构建为发布吗?如果我记得,那应该可以阻止出现断言错误。