假设定义了: int a[100] Type print a,那么 gdb 将自动将其显示为一个数组: 1, 2, 3, 4...。但是,如果将 a作为参数传递给函数,那么 gdb 将把它当作一个普通的 int 指针,类型 print a将显示: (int *)0x7fffffffdaa0。如果我想以数组的形式查看 a,我应该做什么?
int a[100]
print a
1, 2, 3, 4...
a
(int *)0x7fffffffdaa0
使用 x命令。
x
(gdb) x/100w a
简而言之,你应该做的是:
p *array@len
其中 T 是类型,N 是元素数,p 是指针。
gdb
printf
作为 @ Ivaylo Strandjev 说,一般语法是:
print *my_array@len # OR the shorter version: p *my_array@len
从 my_array打印前10个字节的示例:
my_array
print *my_array@10
[推荐! ]自定义 printf样式的打印格式: 但是,如果上面的命令看起来像垃圾,因为它试图将值解释为字符,您可以强制使用不同的格式选项,如下所示:
print/x *my_array@10
print/d *my_array@10
printf()
<format>
下面是我的调试器中的一些实际示例,它们可以从名为 byteArray的 uint8_t数组中打印16个字节。注意第一个有多丑,只有 p *byteArray@16:
byteArray
uint8_t
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}
在我的例子中,最好的版本是使用 print/u将数组作为无符号整数打印出来的最后一个版本,因为它毕竟是一个 uint8_t无符号整数数组:
print/u
(gdb) print/u *byteArray@16 $7 = {0, 1, 2, 3, 4, 5, 6, 7, 248, 249, 250, 251, 252, 253, 254, 255}
由于@Ruslan 在评论中的建议,(int[100])*pointer为我工作
(int[100])*pointer