从核心转储中识别auto_ptr背后的具体对象类型

Mar*_* C. 5 c++ gdb postmortem-debugging

我有一个auto_ptr<IFoo>,IFoo只有纯虚方法的接口.

我现在在分段错误之后也有一个核心文件,我真的想知道这个auto_ptr背后的具体子类是什么.作为dynamic_cast项目中的工作,我认为RTTI必须以某种方式提供,但我不知道如何通过这些信息访问gdb

我得到的输出如下:

(gdb) print this->obj._M_ptr
$22 = (class martin::IFoo *) 0x7418
Run Code Online (Sandbox Code Playgroud)

我真的很想知道,如果指针属于一个IBar或一个IBaz.

谢谢你的帮助!

Emp*_*ian 6

我真的很想知道,如果指针属于IBar或IBaz

GDB应该能够告诉你.使用(gdb) set print object on.文档在这里.

显示指向对象的指针时,使用虚函数表标识对象的实际(派生)类型而不是声明的类型.请注意,虚拟功能表是必需的 - 此功能仅适用于具有运行时类型标识的对象; 对象声明的类型中的单个虚方法就足够了.

更新:

它只输出IFoo*接口

这可能意味着指针确实指向IFoo(例如,类型IBarIBaz已经被破坏的对象).

使用dynamic_cast意味着什么

是的,dynamic_cast没有RTTI就无法工作; 如果你正在使用dynamic_cast,print object on应该只是工作.