如何从 gdb 中提取数据以便在另一个程序中检查它?
我正在使用 gdb 调试程序。为了查看数组 udata
中的内容,我创建了一个名为 printudata 的源文件,其中包含以下内容:
print udata[0]
print udata[1]
print udata[2]
...
print udata[143]
在 gdb 中,我可以使用 source 命令执行它并获得如下输出:
(gdb) source printudata
$399 = 1
$400 = 2.5
$401 = .3-10
...
$542 = <number>
到目前为止,这是我在检查内存方面所能做的最好的事情。
我唯一能想到的就是(学习正则表达式并)去除等号之前的所有内容,这样我就可以将其粘贴到电子表格中,电子表格会告诉我它是否正确。
这真的是从 gdb 获取输出的最佳方式吗?我正在自学所有这些,并且只有 Linux 附带的基本免费工具(并且我是所有这些工具的初学者)上面列出的技术)
最佳答案
如果它真的是这样一个数组,你可以打印一个数组:
p udata
但是,如果 udata
确实是一个指针,那么您可以使用强制转换让 gdb
像数组一样打印它。
p *(double(*)[144])udata
如果你真的想要你当前“脚本”的一次输出行,你可以定义一个函数并使用循环:
define print_udata
set $i=0
while ($i < 144)
p udata[$i]
set $i=$i+1
end
end
要将输出记录到文件中,您可以启用/禁用日志记录:
set logging on
...gdb commands...
set logging off
输出将在名为 gdb.txt
的文件中。
关于c - 你如何从gdb中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16845970/