c - 你如何从gdb中提取数据

标签 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 附带的基本免费工具(并且我是所有这些工具的初学者)上面列出的技术)

最佳答案

如果它真的是这样一个数组,你可以打印一个数组:

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/

相关文章:

php - 尝试使用 C 向本地服务器发送 POST 请求

C动态结构错误

linux - 将命令更改为不 fork 和耗尽资源的命令

gdb - 在 GDB 中,如何将 'exec-wrapper env' 设置为多个环境变量?

c++ - 如何获得在 Mac OS X 上运行的 Homebrew 版本的 GDB?

c - 如何在 bash 脚本中运行一个 c 程序并给它 2 个参数?

c - 解释 gdb 输出

linux - 如何获取以所需域结尾或不以所需域结尾的电子邮件?

c - 我在哪里可以找到 xcb 库的实现?

克隆系统调用从其关联函数返回后退出