2012-12-02 45 views
1

我剛剛安裝了最新發布的gdb-gdb7.5當我用它來調試用utf-8編碼的C++程序時,我設置了gdb使用命令「set charset utf-8」將字符集轉換爲utf8。但是當我想打印一個字符串:char *str = "明天是個好天氣"時,「p str」結果是字符串的地址而不是內容。那麼是否有必要讓gdb調試utf8字符串?gdb7.5 print utf8 string顯示字符串地址不是字符串內容

斷點1,測試()在TEST.CPP:6

6字符* STR = 「我們的世界多麼美好」;

(GDB)N

8的printf( 「%S \ n」 個,STR);

(GDB)p STR

$ 1 = 0x40067c 「0 \ 221們2 \ 204265 \16好」

(GDB)設置的字符集UTF-8

(GDB)顯示的字符集

主機字符集是「UTF-8」。 目標字符集是「UTF-8」。 目標寬字符集是「auto;目前UTF-32」。

(GDB)p STR

$ 2 = 0x40067c

(GDB)

回答

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". 

這表明:

  • 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" 
+0

@RedLv請把這個變成你的問題(包含格式),並刪除您的評論。 –