gdb打印命令中有几个花括号是什么意思?

时间:2014-12-26 03:10:30

标签: gdb

从gdb调试消息:

(gdb) p head_->next
$43 = { 0x0 }

(gdb) p (void *)head_->next
$44 = (void *) 0x603014

(gdb) p / head_->next
$45 = { 0x0 }

请参阅以下屏幕截图:

enter image description here

head _-> next是一个声明为的成员变量:

int *next[3];

起初,我认为头_->接下来是一个指针。但实际上并非如此。现在我很困惑," {0x0}"在gdb中意味着什么?

1 个答案:

答案 0 :(得分:0)

  

head _-> next是一个声明为的成员变量:   int *next[3];

不,不是。至少不在那个文件中。如果它被宣布为那样,你会看到:

(gdb) p head_->next
$1 = {0x0, 0x0, 0x0}

证明:

cat t.c
#include <stdlib.h>

struct Foo {
  int *next[3];
};

int main()
{
  struct Foo *head = calloc(1, sizeof(struct Foo));
  return 0;
}

gcc -g t.c && gdb -q ./a.out

(gdb) start
(gdb) next
(gdb) p head->next
  

gdb中“{0x0}”是什么意思?

这意味着GDB认为正在打印的实体是一个包含1个元素的数组。

如果要检查该数组中的3个元素,可以执行以下操作:

(gdb) p head_->next[0]@3