GDB 中的嵌套类

nested classes in GDB

本文关键字:嵌套 GDB      更新时间:2023-10-16

在我的C++程序中,我有一个嵌套类,定义如下:

class A {
  class B {
    // ...
  }
  // ...
}

当我尝试在 GDB 中投射指针时,如下所示:set $b = (A::B*)p我收到"表达式中的语法错误">

我不熟悉存储在 ELF 文件中的符号(或调试(信息。我想知道我在这里的转换有什么问题以及如何引用 GDB 中的嵌套类。

答案是将类名括在单引号中:

set $b = ('A::B'*)p

请参阅 http://sourceware.org/bugzilla/show_bug.cgi?id=8693

对我有用(使用当前的 CVS GDB 以及 7.3.1(:

$ cat t.cc
struct A {
  struct B {
    int x;
  };
  int y;
};
int main()
{
  A::B ab, *p = &ab;
  return 0;
}
$ gcc -g t.cc && gdb -q ./a.out
(gdb) b main
Breakpoint 1 at 0x4005b8: file t.cc, line 10.
(gdb) r
Breakpoint 1, main () at t.cc:10
10    A::B ab, *p = &ab;
(gdb) p (A::B*)0x1
$1 = (A::B *) 0x1
(gdb) set $a =  (A::B*)0x1
(gdb) p $a
$2 = (A::B *) 0x1
(gdb) quit