2010-10-18 58 views
26

我一直在這個谷歌搜索和檢查通過GDB手冊,但似乎無法找到我想要做的答案。如何列出gdb中的類方法?

有沒有辦法讓gdb打印給定類類型的所有方法的列表?打印命令似乎只顯示數據成員和字段,沒有顯示任何方法。

此外,爲了更進一步,有沒有辦法打印所有正確的虛擬方法給定一個基*指針?說這樣的例子:

struct A 
{ 
    virtual void foo() {} 
}; 

struct B : public A 
{ 
    void foo() {} 
}; 

int main() 
{ 
    A *b = new B; 
} 

我怎樣才能得到gdb輸出變量* B,並將它顯示正確的虛方法(S)?

謝謝

回答

34

您可以使用ptype

想我這行添加到您的示例:

A alpha; 
B beta; 

現在在gdb我可以要求一個類類型的描述(或一個實例):

(gdb) ptype alpha 
type = class A { 
    public: 
    virtual void foo(); 
} 

(gdb) ptype A 
type = class A { 
    public: 
    virtual void foo(); 
} 

(gdb) ptype beta 
type = class B : public A { 
    public: 
    virtual void foo(); 
} 

(gdb) ptype B 
type = class B : public A { 
    public: 
    virtual void foo(); 
} 

如果我嘗試用指針,我得到的聲明類型:

(gdb) ptype b 
type = class A { 
    public: 
    virtual void foo(); 
} * 

如果我想要真正的類型PE,我必須設置`打印對象變量:

(gdb) set print object on 
(gdb) ptype b 
type = /* real type = B * */ 
class A { 
    public: 
    virtual void foo(); 
} * 

,然後再次調用ptype,看看有什麼B有(我不知道該怎麼做,在一個步驟)。

+0

謝謝,這樣做會很好 – greatwolf 2010-10-18 01:59:18