代码之家  ›  专栏  ›  技术社区  ›  Geo

如何禁用“微软Visual C++调试库”异常对话框?

  •  8
  • Geo  · 技术社区  · 16 年前

    如果我运行一个抛出异常(内置调试)的可执行文件,我将收到一个错误对话框,比如说“调试断言失败”,然后是关于异常的一些信息。发生这种情况时,程序的执行将暂停,直到我选择“中止”、“重试”或“忽略”选项之一。

    问题是,我从一个脚本运行很多应用程序,如果其中一个抛出异常,它会暂停我的脚本,直到它被处理。

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

    3 回复  |  直到 15 年前
        1
  •  5
  •   ngoozeff    16 年前

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

    _CrtSetReportMode(_CRT_ASSERT, 0);
    

    看见 msdn

        2
  •  5
  •   rickfoosusa    13 年前

    在中止时,仍然会生成崩溃转储(默认情况下),这样您就不会丢失重要的内容。

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

    msdn assert mode

        3
  •  1
  •   Lizzan    16 年前