【问题标题】:Dump class/struct member variables in g++在 g++ 中转储类/结构成员变量
【发布时间】:2010-01-23 16:33:33
【问题描述】:

g++ 中是否有一个标志或用于转储结构/类的成员变量的工具?为了说明,考虑这样的源代码

struct A { virtual void m() {}; };
struct B : public A { int b; virtual void n() = 0; };
struct C : public B { int c1, c2; void o(); };
struct D : public C { virtual void n() {}; A d; };

我想得到类似的东西

A:   0 = (vptr)

B:   0 = (vptr)
     4 = b

C:   0 = (vptr)
     4 = b
     8 = c1
    12 = c2

D:   0 = (vptr)
     4 = b
     8 = c1
    12 = c2
    16 = d

(-fdump-class-hierarchy 不起作用。它只打印成员函数。)

(假设我不知道 A 到 D 的课程,或者课程太多我不想自己列出。)

(具体是我想转储http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/iokit/IOKit/IOUserClient.h的成员变量)。

【问题讨论】:

    标签: c++ gcc g++


    【解决方案1】:

    为正确的工作使用正确的工具。 g++ 并不是一个层次结构查看工具。

    您始终可以使用doxygen 之类的外部工具,它可以转储graphviz 图表。

    对于电源解决方案,有gcc-xml,它可以将你的整个程序转储到一个你可以随意解析的 xml 文件中。

    【讨论】:

    【解决方案2】:

    我会使用 ddd,然后在数据窗格中显示结构。您可以扩展指向另一个结构的单个结构,并且 UI 将跟随从一个结构到另一个结构。一个非常强大的调试工具。

    【讨论】:

    • 谢谢。但这需要我列出所有结构。此外,不幸的是,有些结构是抽象的,所以我不能new它们。
    • +1。有时代码过于复杂/混淆,Doxygen 无法理解它,但调试器仍有望工作。使用Nemiver 访问复杂结构比使用kdbg 更幸运。 DDD 也是一个有趣的选项,但 UI 需要一些时间来适应。
    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2019-03-02
    • 1970-01-01
    相关资源
    最近更新 更多