回答:
set print elements 0
set print elementsnumber-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
警告: