在用Qt进行编程调试的时候,总是要查看Qt各类变量的值,遗憾的是,无论是windows的VisualStudio还是linux上的gdb,对Qt定义的数据类型等支持并不友好。例如,想要看到QString字符创的值,在windows上要在变量窗口点击好几层才能看到,而在linux,用gdb打印的信息根本无法读取。在网上参考了很多方法,终于找到了比较完美的解决方案,但是网上的文档一般仅针对一个操作系统。但是调试Qt的跨平台程序,一般都是要在很多平台上调试,最常用的就是Windows和Linux了,现在就Windows和Linux操作系统上进行调试如何直接 显示QString的值进行分别说明。当然聪明的小伙伴们还可以举一反三,根据自己的需要实现其他Qt类型的显示,或者更改自定义的数据结构的显示。
Windows(测试环境 win7,Qt4, VisualStudi 2010)
打开VS的安装目录,找到Common7\Packages\Debugger下面的autoexp.dat文件,打开->搜索[Visualizer],在下面添加如下:
; Qt4
QString{
preview ([$e.d->data,su])
stringview ([$e.d->data,sub])
children
(
#(
d: $c.d,
[size]: $c.d->size,
[referenced]: $c.d->ref._q_value
)
)
}
保存后从新启动VS,再进行调试的时候,当鼠标移动到QString变量的时候,就可以直接显示字符串内容了。
Linux(测试环境:redhat 7.1)
在linux中可以使用gdb的扩展功能,用自定义宏命令的方式实现。宏定义如下:
define printqstring
printf "(QString)0x%x (length=%i): \"",&$arg0,$arg0.d->size
set $i=0
while $i < $arg0.d->size
set $c=$arg0.d->data[$i++]
if $c < 32 || $c > 127
printf "\\u0x%04x", $c
else
printf "%c", (char)$c
end
end
printf "\"\n"
end
将上述宏定义保存到家目录下的 .gdbinit文件中,每次启动gdb就能够自动加载了,非常友好方便。如图: