【问题标题】:How can I disable the debug assertion dialog on Windows?如何禁用 Windows 上的调试断言对话框?
【发布时间】:2012-12-06 06:58:19
【问题描述】:

我有一堆以批处理模式运行的单元测试。有时,会因 Visual C++ 库中触发的调试断言而崩溃。这会导致弹出一个对话框,并且单元测试停止运行,直到我单击“确定”关闭对话框。

如何让 C++ 程序在遇到断言时直接崩溃(就像在 Linux 上一样),而不是弹出烦人的对话框?

注意:我不想禁用断言;只是对话框。

【问题讨论】:

    标签: c++ visual-studio winapi


    【解决方案1】:

    查看 _CrtSetReportHook():

    http://msdn.microsoft.com/en-us/library/0yysf5e6.aspx

    MSDN 宣称这是应用程序处理 CRT 运行时故障(如断言)的一种稳健方式。大概您可以定义一个转储您的进程的报告挂钩:

    How to create minidump for my process when it crashes?

    【讨论】:

    • 太棒了——正是我想要的。
    【解决方案2】:

    此代码将禁用对话框的显示。相反,它会在输出窗口和标准错误中打印一个错误。

    int main( int argc, char **argv )
    {
         if( !IsDebuggerPresent() )
         {
              _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG );
              _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );
         }
    
         ...
    }
    

    如果您使用来自Qt 库的Q_ASSERT,则必须为_CRT_ERROR 应用同样的方法。

    【讨论】:

      【解决方案3】:

      我把一个合适的钩子的代码(你可以用 _CrtSetReportHook() 安装)放在:https://stackoverflow.com/a/28852798/2345997

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多