如何在gdb中列出类方法?

gre*_*olf 26 c++ debugging gdb

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

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

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

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

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

int main()
{
  A *b = new B;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Bet*_*eta 35

你可以用ptype.

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

A alpha;
B beta;
Run Code Online (Sandbox Code Playgroud)

现在在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();
}
Run Code Online (Sandbox Code Playgroud)

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

(gdb) ptype b
type = class A {
  public:
    virtual void foo();
} *
Run Code Online (Sandbox Code Playgroud)

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

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

然后ptype再次打电话看看有什么B(我不知道如何一步完成).