当我在使用Visual Studio进行调试时,如果遇到普通的assert语句,我会得到一个选项,可以进入调试器以便查看整个堆栈跟踪和本地变量,而不仅仅是assert消息。
使用Qt Creator+mingw32和Q_ASSERT/Q_ASSERT_X是否也可以实现这个功能呢?
当我在使用Visual Studio进行调试时,如果遇到普通的assert语句,我会得到一个选项,可以进入调试器以便查看整个堆栈跟踪和本地变量,而不仅仅是assert消息。
使用Qt Creator+mingw32和Q_ASSERT/Q_ASSERT_X是否也可以实现这个功能呢?
这是有可能的。不过某种原因导致该功能无法正常工作,但基本上您需要做的就是停在qFatal()。
为确保这一点,在qt Creator中转到 工具 -> 选项 -> 调试器 -> GDB 并选择“发出qFatal时停止”。
qInstallMsgHandler
的文档和他们提供的示例。在自定义消息处理程序中插入断点应该很容易(或者在那一点上只是自己断言)。唯一的小缺点是,您将比实际发生错误的位置更远一些,但是很容易沿着堆栈向上走,直到您到达正确的帧。这是可能的。我手写了一个BreakInDebugger函数和一个调用该函数的assert宏。
例如:#define MyAssert(X) (BreakInDebugger();Q_ASSERT(X))