回答:
set print elements 0
set print elements
number-of-elements
GDBが出力する配列の要素数に制限を設定します。GDBが大きな配列を出力している場合、set print elements
コマンドで設定された要素数を出力した後、GDBは出力を停止します。この制限は、文字列の表示にも適用されます。GDBが開始すると、この制限は200に設定されます。要素数をゼロに設定すると、印刷が無制限になります。
プログラムが正常な状態である限り、call (void)puts(your_string)
標準出力に出力することもできます。同じ原則が、実際にはデバッガーで使用可能なすべての関数に適用されます。
3番目のオプションがあります。xコマンドを使用すると、グローバル設定を変更する代わりに、特定のコマンドに別の制限を設定できます。文字列の最初の300文字を印刷するには、を使用できますx/300s your_string
。出力は少し読みにくいかもしれません。たとえば、SQLクエリを印刷すると、次のようになります。
(gdb)x / 300sb stmt.c_str() 0x9cd948: "SELECT article.r" ... 0x9cd958:「articlからのowid」... ..
x
!
printf
このコマンドは、完全な文字列を出力します:
(gdb) printf "%s\n", string
set print elements nnn
制限を尊重しているようであり、そうしない限り完全な文字列は印刷されませんset print elements 0
。
使用set elements ...
が常に最良の方法であるとは限りません。目立つものがあれば便利ですset string-elements ...
。
したがって、私は.gdbinitでこれらの関数を使用します。
define pstr
ptype $arg0._M_dataplus._M_p
printf "[%d] = %s\n", $arg0._M_string_length, $arg0._M_dataplus._M_p
end
define pcstr
ptype $arg0
printf "[%d] = %s\n", strlen($arg0), $arg0
end
警告: