2012-01-03 114 views
1

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

class A { 

    class B { 
    // ... 
    } 

    // ... 
} 

当我尝试在GDB把指针这样的:set $b = (A::B*)p 我“表达语法错误”获得

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

+0

你使用的是什么版本的'gdb'?在哪个系统上(Linux?)? IIRC在近期在这些问题上取得了重大进展。安装更新版本的'gdb'可能是值得的! – 2012-01-03 20:46:10

+0

谢谢巴西尔。我尝试了最新的GDB(7.3.1),但它给了我同样的错误:“(gdb)set $ b =(A :: B *)0x1 表达式中的语法错误,在'0x1'附近。 – user1101096 2012-01-03 21:16:23

+0

我的Linux发行版是“Fedora release 13(Goddard)”,内核是“2.6.34.9-69.fc13.x86_64#1 SMP” – user1101096 2012-01-03 21:18:15

回答

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 
+0

谢谢!你是对的。它适用于最新的7.4.50(但不适用于GNU FTP的7.3.1)。看起来像GDB中的一个bug。再次感谢! – user1101096 2012-01-04 05:48:53