gdb中的递归sizeof

Recursive sizeof in gdb?

本文关键字:sizeof 递归 gdb      更新时间:2023-10-16

是否有方法使用gdb或其他工具来查找某个结构/类的总大小,包括所有可访问指针成员所指向的内存?有一个基本的sizeof,但这不考虑作为指针的成员的大小,只考虑指针大小本身。因此,也许更清楚地说,我想要的是一个sizeof操作,它将为每个指针成员添加指针成员的大小和所述指针指向的内存的大小(依此类推以进行进一步的嵌套)。

我同意近似,绝对精度是不必要的。

我更喜欢支持c++的解决方案,但是使用c的解决方案总比什么都没有好。不过,我想,假设存在解决方案,大多数解决方案可能会同时使用这两种解决方案。

希望这个描述有意义,我感谢任何关于如何完成这项任务的建议,谢谢。

gdb中没有内置的方法可以做到这一点。我也不知道还有什么预先准备好的工具可以做到这一点。

然而,我认为使用Python脚本功能为gdb编写代码会非常容易。至少,如果您使用的是"常规"数据结构,那么这是正确的。在某些情况下,使用gdb可用的信息是不可能做到这一点的。例如,如果您有一个包含"void*"的结构,那么仅使用debuginfo就无法知道它指向什么。此外,有时类可以用一种模糊的风格编写,从而阻止自动发现——libstdc++中有几个类是这样的。

如果你想更进一步,你可以调整gdb堆项目,这可能会让你挖掘关于"void*"案例和其他案例的信息。