約100kのエントリを持つ文字の配列があります。関数 I
print *buffer
では、時期尚早に切断されているようです。gdb がコンソールに出力する文字数を長くするためにできることはありますか? そうでない場合、この変数をファイルに出力できますか? ダンプコマンドを使用しようとしましたが、正しいことを思い付くことができませんでした。
質問する
19457 次
4 に答える
13
(gdb) help x
Examine memory: x/FMT ADDRESS.
ADDRESS is an expression for the memory address to examine.
FMT is a repeat count followed by a format letter and a size letter.
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
t(binary), f(float), a(address), i(instruction), c(char) and s(string).
Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).
The specified number of objects of the specified size are printed
according to the format.
Defaults for format and size letters are those previously used.
Default count is 1. Default address is following last thing printed
with this command or "print".
(gdb) x/8b array
0xbffd7670: 0 0 0 0 0 0 0 0
(gdb) x/16b array
0xbffd7670: 0 0 0 0 0 0 0 0
0xbffd7678: 0 0 0 0 0 0 0 0
(gdb) x/128b array
0xbffd7670: 0 0 0 0 0 0 0 0
0xbffd7678: 0 0 0 0 0 0 0 0
0xbffd7680: 0 0 0 0 0 0 0 0
0xbffd7688: 0 0 0 0 0 0 0 0
0xbffd7690: 0 0 0 0 0 0 0 0
0xbffd7698: 0 0 0 0 0 0 0 0
0xbffd76a0: 0 0 0 0 0 0 0 0
0xbffd76a8: 0 0 0 0 0 0 0 0
0xbffd76b0: 0 0 0 0 0 0 0 0
0xbffd76b8: 0 0 0 0 0 0 0 0
0xbffd76c0: 0 0 0 0 0 0 0 0
0xbffd76c8: 0 0 0 0 0 0 0 0
0xbffd76d0: 0 0 0 0 0 0 0 0
0xbffd76d8: 0 0 0 0 0 0 0 0
0xbffd76e0: 0 0 0 0 0 0 0 0
0xbffd76e8: 0 0 0 0 0 0 0 0
(gdb)
ASCII 文字記号も印刷する場合は、 を使用しますx/<size>c
。
(gdb) set logging file ~/gdb_dump.txt
(gdb) set logging on
Copying output to /home/mminich/gdb_dump.txt.
(gdb) x/26c array
0xbfff4b20: 97 'a' 98 'b' 99 'c' 100 'd' 101 'e' 102 'f' 103 'g' 104 'h'
0xbfff4b28: 105 'i' 106 'j' 107 'k' 108 'l' 109 'm' 110 'n' 111 'o' 112 'p'
0xbfff4b30: 113 'q' 114 'r' 115 's' 116 't' 117 'u' 118 'v' 119 'w' 120 'x'
0xbfff4b38: 121 'y' 122 'z'
(gdb) set logging off
Done logging to /home/mminich/gdb_dump.txt.
(gdb)
ところで、あなたの質問に対する William Pursell のコメントに心から同意します。
于 2013-01-30T17:13:54.743 に答える
3
私は個人的にデータのダンプに組み込みの python を使用しています。例:
(gdb) pi open("output_data.log","w").write(gdb.execute("print myarray@100000",to_string=True))
于 2019-01-18T15:52:50.213 に答える