如何从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附带的基本免费工具(并且是所有人的初学者)以上列出的技术)
答案 0 :(得分:2)
如果数组真的是这样的数组,你可以打印一个数组:
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
的文件中。
答案 1 :(得分:2)
除上述内容外,gdb还具有“output”和“printf”命令。这些不会将值输入到值历史记录中,它们可以让您更精确地控制输出。
答案 2 :(得分:1)
gdb
在其自己的脚本语言和python中都内置了脚本。您甚至可以在 python程序中从编写GDB脚本。您可以使用任何这些选项将数据写入文件。
有关python&amp;的更多信息gdb here。