2010-10-18 6 views
26

Ich habe für diesen und die Überprüfung durch das GDB Handbuch googeln, aber kann nicht scheinen, eine Antwort zu finden, was ich zu tun versuchen.Wie Klassenmethoden in gdb zur Liste?

Gibt es eine Möglichkeit GDB erhalten eine Auflistung aller Methoden für einen bestimmten Klassentyp zu drucken? Der Druckbefehl scheint nur die Datenelemente und Felder zu zeigen, keine der Methoden, damit sie angezeigt werden.

Zusätzlich ist es noch einen Schritt weiter zu nehmen, ist es eine Möglichkeit, alle richtigen virtuellen Methoden eine Basis * Zeiger gegeben zu drucken? Sprich wie zum Beispiel:

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

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

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

Wie kann ich gdb drucken variable * b und haben sie zeigen die richtige virtuelle Methode (n) erhalten?

Dank

Antwort

34

Sie ptype verwenden können.

Angenommen, füge ich diese Zeilen zu Ihrem Beispiel:

A alpha; 
B beta; 

Jetzt in gdb kann ich für eine Beschreibung eines Klassentyps stellen (oder eine Instanz von einem):

(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(); 
} 

Wenn ich versuchen, dass mit einem Zeiger, erhalte ich den deklarierten Typen:

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

Wenn ich die realen ty will pe, muß ich das `Druckobjekt‘ Variable:

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

und dann ptype wieder anrufen, um zu sehen, was B hat (ich weiß nicht, wie es in einem Schritt zu tun).

+0

Danke, die gut tun – greatwolf