为什么 gdb 无法打印数组元素?

Why gdb failed to print array elements?

我希望使用 gdb 打印已分配内存的所有数组元素。

int main() {
   int* p=(int*)malloc(7*sizeof(int)); 
   for(size_t j=0;j<7;++j) {
         p[j]=j; 
   } 
   return 0; 
} 

所以我用-g3编译这个程序,用gdb启动它,并设置break

> print p@7 

我预计 with 会打印出 1-7,但实际输出是

 = {0x6160b0, 0x5, 0xff00000000, 0x615c60, 0x615c80, 0x615c20, 0x615c40} 

为什么我的期望!=实际结果,我的程序有什么问题吗?

GDB Manual 说:

The left operand of `@' should be the first element of the desired array and be an individual object. The right operand should be the desired length of the array. The result is an array value whose elements are all of the type of the left argument

所以如果你说

 print p@7 

你告诉 GDB 打印一个包含 7 个指针的数组。

您需要的是:

print *p@7