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

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

调试时直接显示QString的字符值(包含windows和linux)_第1张图片



你可能感兴趣的:(编程实践)