我有一个大约100k条目的字符数组.似乎在功能I中
print *buffer它过早地被切断了.我有什么办法可以延长gdb打印到控制台的字符数量吗?如果没有,我可以将此变量打印到文件吗?我试图使用dump命令,但似乎无法找到正确的东西.
mpo*_*llo 21
我想你想要这样的东西:
(gdb) dump binary memory ~/file.bin 0x100390f4c (0x100390f4c + 940)
Run Code Online (Sandbox Code Playgroud)
dump命令使用起来有点尴尬.它需要一个开始一个结束地址,以及表示要转储的表达式(你可以使用value而不是memory指定一个表达式,如果它对你有效,但有时候我更倾向于具体.)但它出现了(因为我'上面已经测试过你可以使用表达式,因为我已根据我想要转储的起始地址以及我想要的字节数指定了上面的结束地址.
你也可以这样做(传入导致指针值的表达式而不是指针本身的值):
(gdb) dump binary memory ~/file.bin buf (buf + len)
Run Code Online (Sandbox Code Playgroud)
pho*_*ger 11
(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)
Run Code Online (Sandbox Code Playgroud)
如果您还想打印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)
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我完全赞同William Pursell在你的问题下的评论:"我发现在执行数据转储的代码中定义函数要简单得多,只需从gdb调用它们.(在#ifdef DEBUG中包含定义)"