如何在gdb中列出类方法?

时间:2010-10-18 01:05:39

标签: c++ debugging gdb

我一直在谷歌上搜索并检查gdb手册,但似乎无法找到我正在尝试做的答案。

有没有办法让gdb打印出给定类类型的所有方法的列表? print命令似乎只显示数据成员和字段,没有显示任何方法。

此外,为了更进一步,有没有办法在给定base *指针的情况下打印所有正确的虚拟方法?比如说:

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

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

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

如何让gdb打印变量* b并让它显示正确的虚拟方法?

由于

1 个答案:

答案 0 :(得分:34)

您可以使用ptype

假设我将这些行添加到您的示例中:

A alpha;
B beta;

现在在gdb中我可以要求描述类类型(或一个实例):

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

如果我用指针尝试,我得到声明的类型:

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

如果我想要真正的类型,我必须设置`print object'变量:

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

然后再次致电ptype以查看B的内容(我不知道如何一步完成)。