如何禁用"Microsoft Visual C++调试库"异常对话?

Geo*_*Geo 8 windows exception-handling

如果我运行一个抛出异常的可执行文件(内置调试),我将收到一个错误对话框,说"Debug assertion failed",然后是一些有关异常的信息.发生这种情况时,程序的执行暂停,直到我选择"中止","重试"或"忽略"选项之一.

问题是,我从脚本运行了很多应用程序,如果其中一个引发异常,它会暂停我的脚本,直到它被处理完毕.

有没有办法禁用这种异常处理机制?

编辑:我记得刚才读到一个注册表项,这将禁用出现的错误消息.有谁知道吗?

ngo*_*eff 5

如果您可以修改应用程序的源代码,请查看 _CrtSetReportMode 函数,例如:

_CrtSetReportMode(_CRT_ASSERT, 0);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅msdn


ric*_*usa 5

如果您可以修改源,则需要修改中止行为(由断言调用)以抑制中止/重试/忽略对话框。

中止时,仍会生成故障转储(默认情况下),因此您不会丢失重要内容。

此外,您可以调整断言行为以仅写入 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)

msdn 断言模式


Liz*_*zan 1

您可以将可执行文件构建为发布版本吗?如果我记得的话,这应该会阻止断言错误的出现。