7

我正在将开发转移到 Linux,但我找不到如何在 g++ 或 clang++ 下从 MSVC++ 获得类似于 /d1reportSingleClassLayout 的输出。如果这些编译器没有这样的功能,是否有提供类似可视化的外部工具?

4

3 回答 3

7

您需要使用调试信息(-g选项)编译文件,然后用于pahole显示结构布局。 pahole通常可从dwarves包中获得(在 GitHub 上在 Ubuntu 中)。

$ g++ -ggdb -c -o myfile.o myfile.cpp
$ pahole -C MyClass myfile.o
class MyClass {
public:

    int ()(void) * *           _vptr.MyClass;        /*     0     4 */
    int                        i;                    /*     4     4 */
    const char  *              c;                    /*     8     4 */
    void MyClass(class MyClass *, const class MyClass  &);

    void MyClass(class MyClass *);

    virtual void ~MyClass(class MyClass *, int);


    /* size: 12, cachelines: 1, members: 3 */
    /* last cacheline: 12 bytes */
};

-C选项允许您选择要检查的类/结构。

如果您无权访问,则可以从或pahole以可读性差得多的形式获得相同的信息。论文https://www.kernel.org/doc/ols/2007/ols2007v2-pages-35-44.pdf与其他工具一起描述。readelf -wi myfile.oeu-readelf -winfo myfile.opaholedwarves

于 2013-04-11T16:15:53.040 回答
1

您也可以使用 Clang 前端来完成。

于 2014-03-29T16:35:29.773 回答
0

-fdump-class-hierarchyg++支持怎么样?

于 2016-02-23T09:31:06.847 回答