我刚刚安装了最新发布的gdb - gdb7.5。当我用它来调试用utf-8编码的c ++程序时,我使用命令“set charset utf-8”将gdb字符集设置为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)设置charset UTF-8
(gdb)show charset
主机字符集为“UTF-8”。 目标字符集是“UTF-8”。 目标宽字符集是“auto;当前为UTF-32”。
(gdb)p str
$ 2 = 0x40067c
(gdb)
答案 0 :(得分:1)
告诉我们完全您做了什么,完全 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".
这表明:
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"