2010-10-18 13 views
26

He estado buscando en Google para esto y revisando el manual de gdb pero parece que no puedo encontrar una respuesta a lo que trato de hacer.¿Cómo enumerar los métodos de clase en gdb?

¿Hay alguna manera de hacer que gdb imprima una lista de todos los métodos para un tipo de clase dado? El comando de impresión solo parece mostrar los miembros y campos de datos, ninguno de los métodos se muestra para él.

Además, para ir un paso más allá, ¿hay alguna manera de imprimir todos los métodos virtuales correctos con un puntero base *? Dicen como por ejemplo:

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

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

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

¿Cómo puedo obtener el BGF para imprimir la variable b * y que se muestre el método virtual correcta (s)?

Gracias

Respuesta

34

Puede utilizar ptype.

Supongamos que añadir estas líneas a su ejemplo:

A alpha; 
B beta; 

Ahora en GDB puedo pedir una descripción de un tipo de clase (o una instancia de una):

(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 yo tratar de que con un puntero, consigo el tipo declarado:

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

Si quiero la verdadera Ty pe, debo establecer la 'variable `objeto de impresión:

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

y luego llamar a ptype de nuevo para ver lo que tiene B (no sé cómo hacerlo en un solo paso).

+0

Gracias, eso hará muy bien – greatwolf

Cuestiones relacionadas