1

如何从 gdb 中提取数据以便在另一个程序中检查它?

我正在使用 gdb 调试程序。要查看 array 中的内容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 附带的基本免费工具(并且是上面列出的所有技术的初学者)

4

3 回答 3

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.

于 2013-05-30T21:17:38.907 回答
2

除了上述之外,gdb 还有“output”和“printf”命令。这些不会将值输入到值历史记录中,它们使您可以更精确地控制输出。

于 2013-05-31T02:05:03.533 回答
1

gdb在自己的脚本语言和 python 中都有内置的脚本。您甚至可以python 程序中编写 GDB 脚本。您可以使用任何这些选项将数据写入文件。

更多关于 python 和 gdb的信息在这里

于 2013-05-30T21:17:27.907 回答