什么是Linux相当于MSVC++的选项/ d1reportSingleClassLayout?

7 c++ linux

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

eca*_*mur 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 */
};
Run Code Online (Sandbox Code Playgroud)

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

如果您无权访问,则pahole可以从readelf -wi myfile.o或更不易阅读的形式获取相同的信息eu-readelf -winfo myfile.o.文章https://www.kernel.org/doc/ols/2007/ols2007v2-pages-35-44.pdfpahole与其他dwarves工具一起描述.