我有一个auto_ptr<IFoo>
,其中IFoo
是一个只有纯虚方法的接口。
我现在在分段错误之后还有一个核心文件,我真的想知道这个auto_ptr背后的具体子类是什么。由于dynamic_cast
在项目中起作用,我认为RTTI必须以某种方式提供,但我不知道如何通过gdb
访问此信息?
我得到的输出如下:
(gdb) print this->obj._M_ptr
$22 = (class martin::IFoo *) 0x7418
如果指针属于IBar
或IBaz
,我真的想知道。
感谢您的帮助!
答案 0 :(得分:6)
如果指针属于IBaror和IBaz
,我真的想知道
GDB应该能够告诉你。使用(gdb) set print object on
。文档here。
显示指向对象的指针时,标识实际(派生) 使用虚拟对象的类型而不是声明的类型 功能表。请注意,虚拟功能表是必需的 - 这个 功能只适用于具有运行时类型的对象 识别;对象声明的类型中的单个虚方法 已经足够了。
更新
它只输出IFoo *接口
这可能意味着指针确实指向IFoo
(例如,类型为IBar
或IBaz
的对象已被破坏)。
使用dynamic_cast意味着
是的,没有RTTI,dynamic_cast
无效;如果您使用的是dynamic_cast
,print object on
应该可以使用。