如何在gdb中打印多态对象的ptype

Sup*_*eth 1 c++ polymorphism gdb

考虑如下所示的简单类:

在此输入图像描述

当我们在 gdb 会话中打印 b 或 d 的 ptype 时,它​​将打印基类(如预期)。

但从逻辑上来说这是不正确的。有没有办法打印对象的实际类型(基于多态行为)?

例如:-

$ ptype b

type = class Base {
  public:
    virtual void display(void) const;
}

$ ptype d

type = class Derived : public Base {
  public:
    virtual void display(void) const;
}
Run Code Online (Sandbox Code Playgroud)

And*_*rew 6

您可以使用set print object on,那么您的输出将如下所示:

(gdb) set print object on 
(gdb) ptype b
type = /* real type = Base * */
class Base {
  public:
    virtual void display(void) const;
} *
(gdb) ptype d
type = /* real type = Derived * */
class Base {
  public:
    virtual void display(void) const;
} *
Run Code Online (Sandbox Code Playgroud)

设置打印后,print object on对象的值将会改变,所以现在你得到:

(gdb) p b
$1 = (Base *) 0x416eb0
(gdb) p d
$2 = (Derived *) 0x416ed0
Run Code Online (Sandbox Code Playgroud)