programacion - metodos en c++
¿Cómo listar los métodos de clase en gdb? (1)
He estado buscando en Google para esto y revisando el manual de gdb pero parece que no puedo encontrar una respuesta a lo que estoy tratando de hacer.
¿Hay alguna forma de 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 de datos y los campos, ninguno de los métodos se muestra para ello.
Además, para ir un paso más allá, ¿hay una manera de imprimir todos los métodos virtuales correctos si se les asigna un puntero base *? Diga como por ejemplo:
struct A
{
virtual void foo() {}
};
struct B : public A
{
void foo() {}
};
int main()
{
A *b = new B;
}
¿Cómo puedo hacer que gdb imprima la variable * b para que muestre los métodos virtuales correctos?
Gracias
Puedes usar ptype
.
Supongamos que agrego estas líneas a tu ejemplo:
A alpha;
B beta;
Ahora en gdb puedo pedir una descripción de un tipo de clase (o una instancia de uno):
(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 intento eso con un puntero, obtengo el tipo declarado:
(gdb) ptype b
type = class A {
public:
virtual void foo();
} *
Si quiero el tipo real, debo establecer la variable `print object '':
(gdb) set print object on
(gdb) ptype b
type = /* real type = B * */
class A {
public:
virtual void foo();
} *
y luego vuelva a llamar a ptype
para ver qué tiene B
(no sé cómo hacerlo en un solo paso).