2012-01-03 83 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