set print object on 命令可以使得用print来显示基类的实际类型
1.代码示例
class A{
public:
A(int c) : c_(c){}
virtual void set(int c1) {
c_ = c1;
}
int c_;
};
class B : public A {
public:
B(int b) : b_(b), A(b){}
void set(int c1) {
A::c_ = c1;
}
int b_;
};
void f(A& a) {
a.set(3);
}
int main() {
A a(0);
B b(1);
f(b);
return 0;
}
2.gdb命令演示
(gdb) b 20
Breakpoint 2 at 0x4006e2: file main.cc, line 20.
(gdb) c
Continuing.
Breakpoint 2, f (a=...) at main.cc:20
(gdb) p a
$1 = (A &) @0x7fffffffdd40: {_vptr.A = 0x400888 <vtable for B+16>, c_ = 1}
(gdb) set print object on
(gdb) p a
$2 = (B &) @0x7fffffffdd40: {<A> = {_vptr.A = 0x400888 <vtable for B+16>, c_ = 1}, b_ = 1}