2010-10-18 4 views
26

J'ai été googling pour cela et vérifiant le manuel de gdb mais ne peux pas sembler trouver une réponse à ce que j'essaye de faire.Comment lister les méthodes de classe dans gdb?

Existe-t-il un moyen pour que gdb imprime une liste de toutes les méthodes pour un type de classe donné? La commande print ne semble montrer que les membres et les champs de données, aucune des méthodes n'est affichée pour cela.

De plus, pour aller encore plus loin, existe-t-il un moyen d'imprimer toutes les méthodes virtuelles correctes avec un pointeur * de base? Dis comme par exemple:

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

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

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

Comment puis-je obtenir gdb pour imprimer la variable * b et l'ont montre la méthode virtuelle correcte (s)?

Merci

Répondre

34

Vous pouvez utiliser ptype.

Supposons que j'ajouter ces lignes à votre exemple:

A alpha; 
B beta; 

Maintenant gdb je peux demander une description d'un type de classe (ou une instance d'un):

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

Si je essayer avec un pointeur, je reçois le type déclaré:

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

Si je veux la vraie ty pe, je dois définir la variable `objet d'impression »:

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

puis appelez ptype nouveau pour voir ce que B a (je ne sais pas comment le faire en une seule étape).

+0

Merci, ça va bien faire – greatwolf

Questions connexes