如何从gdb中提取数据

时间:2013-05-30 21:13:11

标签: c linux gdb

如何从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附带的基本免费工具(并且是所有人的初学者)以上列出的技术)

3 个答案:

答案 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