【问题标题】:Debugging asserts in Qt Creator在 Qt Creator 中调试断言
【发布时间】:2014-09-17 02:54:18
【问题描述】:

当我在使用 Visual Studio 进行调试时遇到正常的断言语句时,我可以选择进入调试器,这样我就可以看到整个堆栈跟踪和局部变量,而不仅仅是断言消息。

Qt Creator+mingw32 和 Q_ASSERT/Q_ASSERT_X 可以做到这一点吗?

【问题讨论】:

    标签: c++ qt qt-creator


    【解决方案1】:

    这是可能的。不知何故,该功能停止了对我的工作,但基本上你想要的是停止 qFatal()。 为了确保发生这种情况,在 qt Creator 中转到 Tools -> Options -> Debugger -> GDB 并选择 "发出 qFatal 时停止"

    【讨论】:

    • 看起来是正确的选项(为什么默认不启用?),但它似乎对我也不起作用。
    • 配置窗格在 Qt Creator 5.3 和可能更高版本中称为“GDB Extended”。
    • 为我工作:Qt Creator 5.3 (32) + Qt Libraries 5.9 (64) + MSYS2/MinGW (64)。
    • 也适用于我,QtCreator 5.12.4 只是复选框已移至“GDB 扩展”选项卡。这个答案比公认的要好得多。
    【解决方案2】:

    您可以为 Qt 发出的消息/警告安装一个处理程序,并自己处理它们。请参阅qInstallMsgHandler 的文档以及他们在那里提供的示例。在自定义消息处理程序中插入中断应该很容易(或者实际上,此时只需自行断言)。一个小缺点是你会在堆栈中比实际发生错误的位置更进一步,但只需向上堆栈直到你处于正确的帧是一件简单的事情。

    【讨论】:

    • 我在 abort() 调用之前使用了带有 __asm("int3") 的示例,效果很好。
    【解决方案3】:

    这是可能的。我已经手动编写了一个 BreakInDebugger 函数和一个调用该函数的断言宏。

    例如:#define MyAssert(X) (BreakInDebugger();Q_ASSERT(X))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 2018-07-27
      • 2018-11-08
      • 2018-06-13
      • 1970-01-01
      相关资源
      最近更新 更多