如何在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
相关产品推荐
相关产品推荐

