首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从gdb中提取数据?

如何从gdb中提取数据?
EN

Stack Overflow用户
提问于 2013-05-30 21:13:11
回答 3查看 1.4K关注 0票数 1

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

我正在使用gdb来调试程序。为了查看数组udata中的内容,我创建了一个名为printudata的源文件,其内容如下:

代码语言:javascript
运行
复制
print udata[0]
print udata[1]
print udata[2]
...
print udata[143]

在gdb中,我可以使用源命令执行该命令,并获得如下输出:

代码语言:javascript
运行
复制
(gdb) source printudata
$399 = 1
$400 = 2.5
$401 = .3-10
...
$542 = <number> 

到目前为止,这是我所能做的检查记忆的最好方法。

我唯一能想到的就是(学习正则表达式),把所有的东西都去掉,直到等号为止,这样我就可以把它粘贴到一个电子表格中,它会告诉我它是否正确。

这真的是从gdb获得输出的最佳方法吗?我正在自学这一切,并且只有Linux附带的基本免费工具(并且是使用上述所有技术的初学者)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-30 21:17:38

如果数组实际上是如下所示,则可以打印数组:

代码语言:javascript
运行
复制
p udata

但是,如果udata实际上是一个指针,那么您可以使用强制转换将gdb打印成数组。

代码语言:javascript
运行
复制
p *(double(*)[144])udata

如果您确实希望在某一时间输出当前“脚本”的行,可以定义一个函数并使用一个循环:

代码语言:javascript
运行
复制
define print_udata
 set $i=0
 while ($i < 144)
  p udata[$i]
  set $i=$i+1
 end
end

要将输出记录到文件中,可以启用/禁用日志记录:

代码语言:javascript
运行
复制
set logging on
...gdb commands...
set logging off

输出将位于一个名为gdb.txt的文件中。

票数 2
EN

Stack Overflow用户

发布于 2013-05-31 02:05:03

除此之外,gdb还有"output“和"printf”命令。它们不会将值输入到值历史记录中,它们会让您更精确地控制输出。

票数 2
EN

Stack Overflow用户

发布于 2013-05-30 21:17:27

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

有关python & gdb 这里的更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16845970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档