如何在GDB中查看像数组一样的指针?

时间:2013-01-24 13:15:43

标签: c gdb

假设已定义:int a[100]键入print a,则gdb会自动将其显示为数组:1, 2, 3, 4...。但是,如果将a作为参数传递给函数,则gdb会将其视为普通的int指针,类型print a将显示:(int *)0x7fffffffdaa0。如果我想将a视为数组,我该怎么办?

5 个答案:

答案 0 :(得分:59)

请参阅here.简而言之,您应该这样做:

p *array@len

答案 1 :(得分:14)

*(T (*)[N])p其中T是类型,N是元素的数量,p是指针。

答案 2 :(得分:8)

使用x命令。

(gdb) x/100w a

答案 3 :(得分:3)

@Ivaylo Strandjev says here一样,常规语法为:

print *my_array@len
# OR the shorter version:
p *my_array@len

示例显示my_array中的前10个字节:

print *my_array@10

但是,如果由于试图将值解释为char而看起来像垃圾,则可以强制使用以下不同的格式设置选项:

  1. print/x *my_array@10 =十六进制
  2. print/d *my_array@10 =有符号整数
  3. print/u *my_array@10 =无符号整数
  4. print/<format> *my_array@10 =根据常规printf()-style format string<format>
  5. 打印

这是我的调试器中的一些真实示例,这些示例从名为uint8_t的{​​{1}}数组打印16个字节。请注意,仅使用byteArray的第一个丑陋的人:

p *byteArray@16

就我而言,最好的版本是最后一个将数组打印为无符号整数的版本,因为它毕竟是(gdb) p *byteArray@16 $4 = "\000\001\002\003\004\005\006\a\370\371\372\373\374\375\376\377" (gdb) print/x *byteArray@16 $5 = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff} (gdb) print/d *byteArray@16 $6 = {0, 1, 2, 3, 4, 5, 6, 7, -8, -7, -6, -5, -4, -3, -2, -1} (gdb) print/u *byteArray@16 $7 = {0, 1, 2, 3, 4, 5, 6, 7, 248, 249, 250, 251, 252, 253, 254, 255} 数组:

uint8_t

答案 4 :(得分:0)

(int[100])*pointer 为我工作感谢@Ruslan 评论中的建议