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

struct field name conflict with stl array in GDB

#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 时,似乎 2 个“array”在 gdb 中有冲突。我在打印 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
(gdb) p v1.array
 = 2

std::array 应该在命名空间 std 中,与字段名无关。不知道为什么会混淆。

有没有关于在没有局部变量的情况下打印 v1.array 的建议?

Not sure why it gets confused.

这肯定是(曾经是?)GDB 中的错误。

x86_64 上使用 GDB 10.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
 = 2

试试更新的 GDB 版本?