You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GDB中解引用并打印指针数组的每个元素?

我来给你几个实用的办法,轻松打印出指针数组里每个指向的结构体内容:

方法1:使用GDB的数组范围操作符@(最直接)

这是GDB专门用来处理连续数组元素的扩展语法,能一次性解引用整个数组:

p *arr[0@3]

执行后会输出你想要的结构体内容:

$1 = {{x = 1}, {x = 2}, {x = 3}}

原理:arr[0@3]表示从arr[0]开始,选取连续的3个元素(也就是你的整个数组),前面的*会对每个指针逐一解引用,直接打印对应的struct S对象。

方法2:用x命令指定类型打印

如果你习惯用x命令查看内存,也可以通过指定结构体类型来打印每个指针指向的内容:

x/3struct S *arr

这个命令会以struct S为单位,打印arr数组中3个指针指向的内存数据,输出效果和方法1一致,清晰展示每个结构体的x成员值。

方法3:自定义GDB宏(适合频繁使用)

如果经常需要处理这类指针数组,可以定义一个宏来简化操作:

define print_ptr_array
  if $argc != 2
    help print_ptr_array
  else
    p *$arg0[0@$arg1]
  end
end
document print_ptr_array
  Print all dereferenced elements of a pointer array.
  Usage: print_ptr_array <array_name> <element_count>
end

定义完成后,后续只需要输入:

print_ptr_array arr 3

就能快速得到结果,省去重复输入长命令的麻烦。

内容的提问来源于stack exchange,提问作者a1b3c7d9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:16:39