提问者:小点点

结构字段名与GDB中的stl数组冲突


#include <array>
typedef struct {
  int array;
} tp1;

int main()
{
  std::array<int,8> array1;
  /*int array=0;*/
  /*array ++;*/
  tp1 v1;
  v1.array = 2;
  return 0;
}

当struct具有字段“array”并且代码使用std::array时,GDB中的2个“array”似乎是冲突的。 打印v1.array时出现语法错误:

Temporary breakpoint 1, main () at a2.c:12
12        v1.array = 2;
(gdb) n
13        return 0;
(gdb) p v1.array
A syntax error in expression, near `'.

但是如果我添加了一个局部变量“array”,那么它就可以正常工作。

(gdb) p array
$1 = 1
(gdb) p v1.array
$2 = 2

std::数组应位于命名空间std中,且与字段名无关。 不知道为什么会混淆。

是否建议打印V1.array而不使用局部变量?


共1个答案

匿名用户

不知道为什么会混淆。

这是(曾经?) 当然是广发行的一个bug。

当在x86_64上使用GDB10.0时,它不会再现,而使用G++(Debian 9.3.0-8)进行编译时:

Temporary breakpoint 1, main () at t.cc:12
12        v1.array = 2;
(gdb) n
13        return 0;
(gdb) p v1.array
$1 = 2

尝试更新的GDB版本?