在我的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