gdb打印qstring内容(for qt5)

1、gdb中无法直接打印出QString的原始字符串,可以通过自定义gdb函数方式打印出来,网上能搜出来的都已经过时了,不适应最新的QString内存结构,这里提供一个最新的(for Qt5):

define pqs
    printf "(QString)0x%x (length=%i, offset=%i, ref=%x): \"",&$arg0,$arg0.d->size,$arg0.d->offset,&$arg0.d->ref
    set $i=0
    set $off=$arg0.d->offset
    set $base=(void*)(&$arg0.d->ref) + $off
    while $i < $arg0.d->size
        set $c=((short*)$base)[$i++]
        if $c < 32 || $c > 127
                printf "\\u0x%04x", $c
        else
                printf "%c", (char)$c
        end
    end
    printf "\"\n"
end

2、将上面内容存在~/.gdbinit 文件中, 重启gdb或者执行在gdb中执行source ~/.gdbinit。

3、使用方式: 
   在需要打印QString的地方执行 pqs xxx,  xxx为QString的变量名。
   (gdb) pqs path
   (QString)0xffffb348 (length=9, offset=24, ref=210c0e0): "Shortcuts"
posted @ 2021-02-20 17:41  荷包蛋  阅读(1332)  评论(0编辑  收藏  举报