Подтвердить что ты не робот

Как визуализировать граф структур C, которые содержат/указывают друг на друга?

Я использую Ubuntu 10.04 и изучаю программирование объектов ядра.

Я столкнулся с некоторыми довольно сложными структурами, которые мне трудно читать, поэтому я подумал, что попытаюсь найти какой-то инструмент, который может помочь мне визуализировать их.

Единственное, что я могу найти до сих пор, - VCG, который имеет Пример визуализации Struct, который выглядит следующим образом:

QJohG.png

который выглядит как что-то, что я хотел бы использовать.

Первое, что последний VCG, упакованный для Ubuntu, vcg (1.30debian-6) в hardy - но пакет .deb могут быть загружены и установлены в Ubuntu Lucid без проблем.

Однако, похоже, этот пакет является только средством просмотра VCG (похоже, vcgviewer, я бы предположил). Примечания vcgviewer:

To generate compiler graph data with newest gcc compilers use:
gcc -g -da -dv -fdump-tree-original-raw -fdump-tree-all-all 

Итак, по-видимому, мне пришлось бы использовать эти ключи вместе с gcc при компиляции, чтобы генерировать графические файлы .vcg из источника C.

Проблема, однако, в том, что я строю модуль ядра, который ссылается только на заголовки Linux - поскольку я стараюсь избегать столько, сколько я могу перекомпиляции всего ядра. И кажется, как только я попытаюсь использовать -fdump-tree-... переключатели в этом контексте (модуль ядра), gcc хочет начать компиляцию остальной части ядра тоже! (и, очевидно, не удается, как для компиляции, так и для генерации графиков .vcg - поскольку у меня нет источников ядра, только заголовки)

Итак, мой вопрос - есть ли инструмент, который будет генерировать графики .vcg или .dot структур - просто используя текстовый заголовочный файл в качестве входных данных? (ему не нужно было бы разрешать все зависимости - просто те из файлов заголовков в том же каталоге)

EDIT: для меня на самом деле не так важно, чтобы бэкэнд был .vcg или .dot, в частности, я упомянул их только потому, что нашел их до сих пор; любой вид программного обеспечения, позволяющий аналогичную визуализацию структуры, независимо от бэкэнд, приветствуется:)

PS: Обратите внимание: если вы не хотите использовать VCG-просмотрщики для просмотра графиков .vcg, вы можете преобразовать формат .vcg в формат .dot и вместо graphviz использовать для визуализации. Что сработало для меня - использовать graph-easy - search.cpan.org для perl - который сначала был упакован в Ubuntu с версией Maverick, как libgraph-easy-perl (однако, файл .deb может - снова - быть загружен и установлен без проблем в Lucid). libgraph-easy-perl устанавливает graph-easy script, который затем позволяет делать такие вещи, как:

graph-easy test.vcg --as_dot | dot -Tpng -o test.vcg.png 

См. также " [файлы с графическим интересом] VCG файлы" и " Diego Novillo - Re: не может найти VCG viewer" для другого vcg-to-dot script (который, к сожалению, не работал у меня).

4b9b3361

Ответ 1

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

Ответ 2

Мне удалось успешно создать модуль ядра с генерацией vcg, выполнив следующие действия:

  • Создание связанной копии исходного или исходного каталога ядра с помощью cp -al /usr/src/linux-srcdir /tmp/tmp-srcdir, так как gcc хочет записать в текущий рабочий каталог.
  • Добавление EXTRA_CFLAGS="-g -da -dv -fdump-tree-original-raw -fdump-tree-all-all" в командную строку make, например. -C /tmp/tmp-srcdir M= PWD EXTRA_CFLAGS="-g -da -dv -fdump-tree-original-raw -fdump-tree-all-all". файлы vcg генерируются в /tmp/tmp-srcdir