2013-04-11 25 views
7

Tôi đang chuyển phát triển sang Linux nhưng tôi không thể tìm thấy cách tôi có thể nhận được kết quả tương tự như/d1reportSingleClassLayout từ MSVC++ theo g ++ hoặc clang ++. Nếu các trình biên dịch không có một tính năng như vậy, có một công cụ bên ngoài cung cấp trực quan tương tự?Linux tương đương với tùy chọn/d1reportSingleClassLayout của MSVC++ là gì?

+1

Bạn muốn được tốt hơn yêu cầu này trên stack overflow, vì đây là thực sự hơn một C++ câu hỏi hơn bất cứ điều gì khác; các tính năng trình biên dịch đặc biệt như thế này không liên quan gì đến hệ điều hành mà trình biên dịch đang chạy. – delicateLatticeworkFever

+0

Đúng, bắt được bản chỉnh sửa trong vòng 5 phút;) Thx. Tôi cũng đã gắn cờ nó. – delicateLatticeworkFever

+0

Cảm ơn bạn đã trả lời nhanh chóng! Tôi nghĩ rằng kể từ khi tôi muốn có một giải pháp Linux nó sẽ là thích hợp ở đây. Xin lỗi vì tiếng ồn. –

Trả lời

7

Bạn cần biên dịch tệp có thông tin gỡ lỗi (-g) sau đó sử dụng pahole để hiển thị bố cục struct. pahole thường có sẵn từ gói dwarves (source; on GitHub; in 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 */ 
}; 

Tùy chọn -C cho phép bạn chọn lớp/cấu trúc cần kiểm tra.

Nếu bạn không có quyền truy cập vào pahole, bạn có thể nhận được thông tin tương tự ở dạng ít dễ đọc hơn từ readelf -wi myfile.o hoặc eu-readelf -winfo myfile.o. Giấy https://www.kernel.org/doc/ols/2007/ols2007v2-pages-35-44.pdf mô tả pahole cùng với các công cụ dwarves khác.

Các vấn đề liên quan