我一直在使用UChar *作为字符串的不熟悉的代码库上做一些工作。 Uchars定义如下(至少根据gdb)
(gdb) ptype UChar
type = short unsigned int
然而,当我尝试在gdb中打印这些时,我只是得到了地址。我也可以索引指针并检索每个字符的值。
有没有办法从gdb中打印UChar *类型的变量并获取有意义的字符串?
此外,这是在OS X上,如果这有任何区别。
答案 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