2

我刚刚安装了最新发布的gdb--gdb7.5。当我用它来调试使用utf-8编码的c++程序时,我使用命令“set charset utf-8”将gdb charset设置为utf8。但是,当我想打印一个字符串 :char *str = "明天是个好天气"时,“p str”结果是字符串的地址而不是内容。那么 gdb 是否需要调试 utf8 字符串?

断点1,test() at test.cpp:6

6 char *str = "我们的世界多么美好";

(gdb) n

8 printf("%s\n", str);

(gdb) p str

$1 = 0x40067c "0\221们2\204265\214321016好"

(gdb) 设置字符集 UTF-8

(gdb) 显示字符集

主机字符集是“UTF-8”。目标字符集是“UTF-8”。目标宽字符集是“auto;目前是 UTF-32”。

(gdb) p str

$2 = 0x40067c

(gdb)

4

1 回答 1

2

告诉我们你做了什么,以及GDB打印了什么。

使用 gdb-7.5:

Temporary breakpoint 1, main () at t.c:5
5     char *str = "明天是个好天气";
(gdb) n

6     return 0;
(gdb) p str
$1 = 0x4005cc "明天是个好天气"

(gdb) show charset 
The host character set is "auto; currently UTF-8".
The target character set is "auto; currently UTF-8".
The target wide character set is "auto; currently UTF-32".

(gdb) set charset utf
Undefined item: "utf".

这表明:

  • GDB 为我做了“开箱即用”的正确事情。
  • 你可能没有做set charset utf,而是做了别的事情。

LANG在环境中的设置是相关的。我的是:

$ echo $LANG
en_US.UTF-8

如果我unset LANG,我得到:

(gdb) p str
$1 = 0x4005cc "\346\230\216\345\244\251\346\230\257\344\270\252\345\245\275\345\244\251\346\260\224"
于 2012-12-02T17:12:36.810 回答