Как визуализировать график структур C, которые содержат / указывают друг на друга? - PullRequest
17 голосов
/ 13 октября 2010

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

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

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

image

which looks like something I'd like to use.

First thing, is that the last VCG packaged for Ubuntu is 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 - просто используя в качестве входных данных простой текстовый заголовочный файл? ( он не должен был бы разрешать все зависимости - просто те, которые находятся в заголовочных файлах в одном каталоге )

РЕДАКТИРОВАТЬ: на самом деле для меня не так важно, чтобы бэкэнд был, в частности, .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 скрипт, который затем позволяет делать такие вещи, как:

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

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

Ответы [ 2 ]

5 голосов
/ 13 октября 2010

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

2 голосов
/ 13 октября 2010

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

  1. Создание связанной копии каталога источника или заголовка ядра с использованием cp -al /usr/src/linux-srcdir /tmp/tmp-srcdir, поскольку gcc хочет написатьв текущий рабочий каталог.
  2. Добавление 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...