我注意到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没有此问题。