在Qt Creator中调试断言

21

当我在使用Visual Studio进行调试时,如果遇到普通的assert语句,我会得到一个选项,可以进入调试器以便查看整个堆栈跟踪和本地变量,而不仅仅是assert消息。

使用Qt Creator+mingw32和Q_ASSERT/Q_ASSERT_X是否也可以实现这个功能呢?

3个回答

25

这是有可能的。不过某种原因导致该功能无法正常工作,但基本上您需要做的就是停在qFatal()。

为确保这一点,在qt Creator中转到 工具 -> 选项 -> 调试器 -> GDB 并选择“发出qFatal时停止”。


看起来是正确的选项(为什么默认没有开启?),但它似乎对我也不起作用。 - Peter Tseng
4
在Qt Creator 5.3及更高版本中,配置面板被称为“GDB Extended”。 - Paulo Carvalho
对我来说可行:Qt Creator 5.3(32位)+ Qt Libraries 5.9(64位)+ MSYS2/MinGW(64位)。 - Paulo Carvalho
对我也适用,QtCreator 5.12.4,只是复选框已经移到了“GDB扩展”选项卡。这个答案比被接受的那个好多了。 - nurdglaw

8
您可以安装一个处理Qt发出的消息/警告的处理程序,并进行自己的处理。请参阅qInstallMsgHandler的文档和他们提供的示例。在自定义消息处理程序中插入断点应该很容易(或者在那一点上只是自己断言)。唯一的小缺点是,您将比实际发生错误的位置更远一些,但是很容易沿着堆栈向上走,直到您到达正确的帧。

3
我之前在调用 abort() 函数前使用了 __asm("int3") 的例子,效果非常好。 - Dan Berindei

2

这是可能的。我手写了一个BreakInDebugger函数和一个调用该函数的assert宏。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接