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"