在我的C++程序我有一个嵌套类定义如下:嵌套类在GDB
class A {
class B {
// ...
}
// ...
}
当我尝试在GDB把指针这样的:set $b = (A::B*)p
我“表达语法错误”获得
我不熟悉存储在ELF文件中的符号(或调试)信息。我想知道我在这里的投射有什么问题,以及如何在GDB中引用嵌套类。
在我的C++程序我有一个嵌套类定义如下:嵌套类在GDB
class A {
class B {
// ...
}
// ...
}
当我尝试在GDB把指针这样的:set $b = (A::B*)p
我“表达语法错误”获得
我不熟悉存储在ELF文件中的符号(或调试)信息。我想知道我在这里的投射有什么问题,以及如何在GDB中引用嵌套类。
对我的作品(目前使用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
谢谢!你是对的。它适用于最新的7.4.50(但不适用于GNU FTP的7.3.1)。看起来像GDB中的一个bug。再次感谢! – user1101096 2012-01-04 05:48:53
你使用的是什么版本的'gdb'?在哪个系统上(Linux?)? IIRC在近期在这些问题上取得了重大进展。安装更新版本的'gdb'可能是值得的! – 2012-01-03 20:46:10
谢谢巴西尔。我尝试了最新的GDB(7.3.1),但它给了我同样的错误:“(gdb)set $ b =(A :: B *)0x1 表达式中的语法错误,在'0x1'附近。 – user1101096 2012-01-03 21:16:23
我的Linux发行版是“Fedora release 13(Goddard)”,内核是“2.6.34.9-69.fc13.x86_64#1 SMP” – user1101096 2012-01-03 21:18:15