Дамп переменных класса / члена структуры в g ++ - PullRequest
13 голосов
/ 23 января 2010

Есть ли в 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).

Ответы [ 2 ]

6 голосов
/ 23 января 2010

Используйте правильный инструмент для правильной работы. g ++ - не очень хороший инструмент для просмотра иерархии.

Вы всегда можете использовать внешний инструмент, такой как doxygen , который может создавать диаграммы graphviz .

Для мощных решений есть gcc-xml , который может выгрузить всю вашу программу в файл xml, который вы можете анализировать по своему усмотрению.

2 голосов
/ 23 января 2010

Я бы использовал ddd, а затем отобразил бы структуры в области данных. Вы можете расширить отдельную структуру, которая указывает на другую структуру, и пользовательский интерфейс будет переходить от одного к другому. Очень мощный инструмент отладки.

...