如何从gdb内部打印UChar * var作为字符串?

时间:2009-06-04 22:53:28

标签: gdb printing

我一直在使用UChar *作为字符串的不熟悉的代码库上做一些工作。 Uchars定义如下(至少根据gdb)

(gdb) ptype UChar
type = short unsigned int

然而,当我尝试在gdb中打印这些时,我只是得到了地址。我也可以索引指针并检索每个字符的值。

有没有办法从gdb中打印UChar *类型的变量并获取有意义的字符串?

此外,这是在OS X上,如果这有任何区别。

4 个答案:

答案 0 :(得分:3)

只需在.gdbinit中定义此命令并输入uc varname(uc可能会作为您定义的ucharprint命令的简短形式)

define ucharprint
echo "
set $c = (unsigned short*)$arg0
while ( *$c )
  if ( *$c > 0x7f )
    printf "[%x]", *$c
  else
    printf "%c", *$c
  end
  set $c++
end
echo "\n
end

您不需要担心字节顺序,因为UTF-16 UChar类型中的每个unsigned short都将代码点(或半代理)保存为本机二进制整数。

答案 1 :(得分:0)

首先需要弄清楚UChar实际代表什么。它可能是UTF-16或UCS-2(但BE或LE?)。确定后,您希望提供(您可以使用现有代码,例如iconv)调试方法来转换为UTF-8。有关详细信息,请参阅http://www.skynet.ie/~caolan/TechTexts/GdbUnicodePrinting.html

答案 2 :(得分:0)

print与x相同; x / 1s 0x1234 - 将在内存中打印出该位置作为字符串,如果你继续点击carrage返回,它将打印下一行......等等......

如果要连续监视某些内容,请使用display /,格式说明符与x(print)相同。 “display / 1s 0x1234”然后每当你通过一个断点或一个步骤中断时,你会看到你配置的信息打印出来..更新等......

答案 3 :(得分:-1)

如果它是ascii字符串,您可能会尝试告诉gdb重新解释:

(gdb) print (char*) theUcharPtr