【发布时间】:2014-09-17 02:54:18
【问题描述】:
当我在使用 Visual Studio 进行调试时遇到正常的断言语句时,我可以选择进入调试器,这样我就可以看到整个堆栈跟踪和局部变量,而不仅仅是断言消息。
Qt Creator+mingw32 和 Q_ASSERT/Q_ASSERT_X 可以做到这一点吗?
【问题讨论】:
标签: c++ qt qt-creator
当我在使用 Visual Studio 进行调试时遇到正常的断言语句时,我可以选择进入调试器,这样我就可以看到整个堆栈跟踪和局部变量,而不仅仅是断言消息。
Qt Creator+mingw32 和 Q_ASSERT/Q_ASSERT_X 可以做到这一点吗?
【问题讨论】:
标签: c++ qt qt-creator
这是可能的。不知何故,该功能停止了对我的工作,但基本上你想要的是停止 qFatal()。 为了确保发生这种情况,在 qt Creator 中转到 Tools -> Options -> Debugger -> GDB 并选择 "发出 qFatal 时停止"
【讨论】:
您可以为 Qt 发出的消息/警告安装一个处理程序,并自己处理它们。请参阅qInstallMsgHandler 的文档以及他们在那里提供的示例。在自定义消息处理程序中插入中断应该很容易(或者实际上,此时只需自行断言)。一个小缺点是你会在堆栈中比实际发生错误的位置更进一步,但只需向上堆栈直到你处于正确的帧是一件简单的事情。
【讨论】:
这是可能的。我已经手动编写了一个 BreakInDebugger 函数和一个调用该函数的断言宏。
例如:#define MyAssert(X) (BreakInDebugger();Q_ASSERT(X))
【讨论】: