GDB将索引在结构中的数组视为结构本身的索引

时间:2019-07-15 20:48:25

标签: gdb

我注意到gdb在尝试打印属于struct成员的数组中的元素时给了我一些奇怪的结果,所以我写了这个小测试。

#include <stdint.h>

struct Example {
   uint16_t foo;
   uint16_t bar;
   uint16_t arr[4];
};

int main () {
   struct Example test;
   test.foo = 0xdead;
   test.bar = 0xbeef;
   test.arr[0] = 4;
   test.arr[1] = 5;
   test.arr[2] = 6;
   test.arr[3] = 7;
}

在gdb中,我让所有语句执行,然后去检查结果。

(gdb) p/x test
$2 = {foo = 0xdead, bar = 0xbeef, arr = {0x4, 0x5, 0x6, 0x7}}

(gdb) p/x test.arr
$3 = {0x4, 0x5, 0x6, 0x7}

这两个都按预期打印。但是,当我尝试打印单个数组元素时,gdb似乎将索引视为整个结构的索引,而不仅仅是数组。

(gdb) p/x test.arr[0]
$4 = 0xdead
(gdb) p/x test.arr[1]
$5 = 0xbeef
(gdb) p/x test.arr[2]
$6 = 0x4
(gdb) p/x test.arr[3]
$7 = 0x5
(gdb) p/x test.arr[4]
$8 = 0x6
(gdb) p/x test.arr[5]
$9 = 0x7

这是什么原因造成的?我正在使用RHEL随附的旧版gdb。 GNU gdb(GDB)红帽企业版Linux 7.6.1-114.el7

LLDB没有此问题。

0 个答案:

没有答案