我一直在谷歌上搜索并检查gdb手册,但似乎无法找到我正在尝试做的答案。
有没有办法让gdb打印出给定类类型的所有方法的列表? print命令似乎只显示数据成员和字段,没有显示任何方法。
此外,为了更进一步,有没有办法在给定base *指针的情况下打印所有正确的虚拟方法?比如说:
struct A
{
virtual void foo() {}
};
struct B : public A
{
void foo() {}
};
int main()
{
A *b = new B;
}
如何让gdb打印变量* b并让它显示正确的虚拟方法?
由于
答案 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
的内容(我不知道如何一步完成)。