GDB中的嵌套类

时间:2012-01-03 20:42:32

标签: c++ casting gdb nested-class

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

class A {

  class B {
    // ...
  }

  // ...
}

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

适合我(使用当前的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