kennytm
kennytm

Reputation: 523514

Dump class/struct member variables in g++

Is there a flag in g++ or tools to dump the member variables of a struct/class? To illustrate, consider source code like this

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; };

I want to get something similar to

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 does not work. It only prints the member functions.)

(Assume I don't know the classes A to D, or there are so many classes that I don't want to list them out myself.)

(Specifically, I want to dump the member variables of http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/iokit/IOKit/IOUserClient.h).

Upvotes: 13

Views: 4395

Answers (2)

Kornel Kisielewicz
Kornel Kisielewicz

Reputation: 57575

Use the right tool for the right job. g++ isn't much of a hierarchy viewing tool.

You can always use a external tool like doxygen, that can dump graphviz diagrams.

For power-solutions there is gcc-xml, that can dump your whole program into an xml file that you can parse at will.

Upvotes: 6

jfawcett
jfawcett

Reputation: 885

I would use ddd, then display the structs in the data pane. You can expand an individual struct that points to another struct and the UI will follow from one to the other. A very powerful debugging tool.

Upvotes: 2

Related Questions