tags:

views:

68

answers:

1

I've been googling for this and checking through the gdb manual but can't seem to find an answer to what I'm trying to do.

Is there a way to get gdb to print out a listing of all the methods for a given class type? The print command only seems to show the data members and fields, none of the methods are displayed for it.

Additionally, to take it a step further, is there a way to print all the correct virtual methods given a base *pointer? Say like for example:

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

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

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

How can I get gdb to print variable *b and have it show the correct virtual method(s)?

Thanks

+8  A: 

You can use ptype.

Suppose I add these lines to your example:

A alpha;
B beta;

Now in gdb I can ask for a description of a class type (or an instance of one):

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

If I try that with a pointer, I get the declared type:

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

If I want the real type, I must set the `print object' variable:

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

and then call ptype again to see what B has (I don't know how to do it in one step).

Beta
Thank you, that will do nicely
Victor T.