调试时直接显示QString的字符值(包含windows和linux)

来源:互联网 发布:c语言graphics 编辑:程序博客网 时间:2024/05/21 21:39

在用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],在下面添加如下:
; Qt4QString{    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就能够自动加载了,非常友好方便。如图:





阅读全文
0 0