2

最新リリースの gdb--gdb7.5 をインストールしました。これを使用して utf-8 でエンコードされた C++ プログラムをデバッグしたとき、コマンド「set charset utf-8」で gdb charset を utf8 に設定しました。ただし、文字列 : を出力したい場合char *str = "明天是个好天气"、「p str」の結果は、コンテンツではなく文字列のアドレスになります。gdbがutf8文字列をデバッグするために必要なものはありますか?

ブレークポイント 1、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 に答える