424

GDB で C 文字列の全長を出力したい。デフォルトでは省略されていますが、GDB に文字列全体を出力させるにはどうすればよいですか?

4

6 に答える 6

565
set print elements 0

GDBマニュアルから

set print elements number-of-elements
GDB が出力する配列要素の数に制限を設定します。GDB が大きな配列を出力している場合、set print elementsコマンドで設定された要素数を出力した後、出力を停止します。この制限は、文字列の表示にも適用されます。GDB の開始時に、この制限は 200 に設定されます。number -of-elementsを 0 に設定すると、印刷が無制限になります。
于 2008-10-24T12:37:42.037 に答える
112

プログラムが正常な状態にある限り、call (void)puts(your_string)標準出力に出力することもできます。実際には、デバッガーで使用できるすべての機能に同じ原則が適用されます。

于 2008-10-31T10:42:56.483 に答える
42

3 番目のオプションがあります。x コマンドを使用すると、グローバル設定を変更する代わりに、特定のコマンドに別の制限を設定できます。文字列の最初の 300 文字を出力するには、x/300s your_string. 出力は少し読みにくいかもしれません。たとえば、SQL クエリを出力すると、次のようになります。

(gdb) x/300sb stmt.c_str()
0x9cd948: "SELECT article.r"...
0x9cd958: "owid FROM 記事"...
..
于 2011-10-06T16:15:39.330 に答える
22

それを完了するだけです:

(gdb) p (char[10]) *($ebx)
$87 =   "asdfasdfe\n"

長さを指定する必要がありますが、その文字列の表現を変更できます。

(gdb) p/x (char[10]) *($ebx)
$90 =   {0x61,
  0x73,
  0x64,
  0x66,
  0x61,
  0x73,
  0x64,
  0x66,
  0x65,
  0xa}

これは、値でデバッグしたい場合に役立ちます

于 2012-01-18T11:05:52.507 に答える