【问题标题】:How can I disable "Microsoft Visual C++ Debug Library" exception dialogues?如何禁用“Microsoft Visual C++ 调试库”异常对话框?
【发布时间】:2010-08-05 07:22:44
【问题描述】:

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

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

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

编辑:我记得不久前读过有关注册表项的信息,它会禁用错误消息的出现。有人知道吗?

【问题讨论】:

    标签: windows exception-handling


    【解决方案1】:

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

    _CrtSetReportMode(_CRT_ASSERT, 0);
    

    请参阅msdn 了解更多信息。

    【讨论】:

      【解决方案2】:

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

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

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

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

        【讨论】:

        • 即使它们是我的应用程序,我也无法在发布时构建它们。
        • @Geo:如果您不能修改应用程序本身,那么一种选择是编写一个小程序,它会定期检查此窗口的存在并向其发送击键“I”。我自己就是这样做的,这很有帮助。
        • 难道没有我们可以修改的注册表项来达到类似的效果吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 2015-05-07
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多