gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:44 27 4
gpt4 key购买 nike

我有一个 auto_ptr<IFoo> , 其中IFoo是一个只有纯虚拟方法的接口(interface)。

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

我得到的输出如下:

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

我真正想知道的是,指针是否属于 IBarIBaz .

感谢您的帮助!

最佳答案

What I'd really like to know, if the pointer belongs to an IBaror an IBaz

GDB 应该能够告诉您这一点。使用 (gdb) set print object on。文档 here .

When displaying a pointer to an object, identify the actual (derived) type of the object rather than the declared type, using the virtual function table. Note that the virtual function table is required—this feature can only work for objects that have run-time type identification; a single virtual method in the object's declared type is sufficient.

更新:

it only outputs the IFoo* interface

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

Would working with dynamic_cast imply

是的,dynamic_cast 不能在没有 RTTI 的情况下工作;如果您使用的是 dynamic_castprint object on 应该可以正常工作。

关于c++ - 从核心转储中识别 auto_ptr 背后对象的具体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com