【问题标题】:Is there any way to dump the class layout of a g++ compiled program有什么方法可以转储 g++ 编译程序的类布局
【发布时间】:2014-10-20 14:39:28
【问题描述】:

使用 g++ 编译时,-fdump-class-hierarchy 以(或多或少)人类可读的格式导出程序的 vtable。但是,生成的文件仅包含有关 vtable 的信息,但不包含有关类布局本身的信息。我想获得我所有程序类的布局的完整列表。

clang 提供了 -cc1 -fdump-record-layouts 参数来实现这一点。可以使用 -d1reportAllClassLayout 调用 MS 编译器。是否有任何 g++ 开关可以做到这一点?

【问题讨论】:

  • Clang 和 g++ 产生二进制兼容的输出,不是吗?所以如果 Clang 可以生产它...
  • 描述类布局的人类可读输出与输入有何不同?您需要的是填充和对齐信息,还是扁平化基类和成员子对象的东西?
  • @Useless 类布局可能分布在许多不同的文件中,并且混合了多重继承和虚拟继承,您确实必须对编译器内部有一些了解才能弄清楚出来。
  • @JamesKanze 哦,当然 - 我只是在询问动机,而不是质疑实用程序。

标签: c++ variables gcc g++ vtable


【解决方案1】:

如果程序编译时带有调试信息,您可以使用pahole从调试信息中转储struct和vtable布局:

g++ -ggdb3 -c program.cpp
pahole program.o

请注意,g++ 只会为程序中实际使用的结构生成调试信息,因此您可能必须添加一些虚拟函数来创建或以其他方式使用您的结构类型的对象。

【讨论】:

猜你喜欢
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2020-02-16
  • 2020-11-04
  • 2013-03-20
相关资源
最近更新 更多