21

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

是否可以使用 Qt Creator+mingw32 和 Q_ASSERT/Q_ASSERT_X 来做到这一点?

4

3 回答 3

25

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

于 2012-08-27T23:58:08.913 回答
8

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

于 2010-01-21T15:39:44.863 回答
2

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

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

于 2010-01-21T13:01:46.527 回答