Визуализация огромного проекта C++ с помощью Doxygen + Graphviz

Я унаследовал большой проект C++, который мне нужно перенести на Linux. В этом проекте более 200 000 строк исходного кода, разбросанных по более чем 300 файлам. Было бы чрезвычайно полезно иметь визуальное дерево зависимостей/включений для этого проекта, чтобы я мог получить общее представление о внутренней структуре приложения. Это также помогло бы мне найти «линии разлома» между основными модулями и файлами заголовков Windows, чтобы я мог их заглушить позже.

Средство просмотра классов в Visual Studio просто не справляется. Я читал и узнал, что Doxygen — это широко используемый инструмент для вывода списка зависимостей. Я гораздо больше визуальный человек, и обнаружил, что это не так уж полезно. К счастью, я узнал о плагине Graphviz, используя что-то под названием «Dot», которое позволило мне генерировать деревья зависимостей для частей. К сожалению, для конкретных файлов генерируются сотни небольших деревьев зависимостей, а не одно большое, как я надеялся. Вот несколько примеров:

DoxygenDDLCommInfC DoxygenDDBItemBase

Как вы можете видеть (Я надеюсь ), Doxygen/GraphViz, кажется, сдаются, когда граф становится слишком большим и дочерние узлы становятся серыми. Затем мне нужно перейти к графику для этого конкретного узла, если я хочу увидеть, что находится дальше по дереву. Это не только ограничивает визуальную полезность графа, но и, если дочерний узел зависит от любого из узлов исходного графа, эти узлы будут показаны снова. Это приводит к большому количеству повторяющихся соединений, из-за чего очень сложно концептуально изолировать граф от любого заданного файла. В результате я чувствую, что меня «увеличили», и я все еще не вижу всей картины.

Я пробовал играть с настройкой DOT _GRAPH _MAX _NODES в расширенном представлении в Doxygen, но это, похоже, не влияет на объем генерируемых графиков. Судя по выходным данным, полученным в результате любого запуска, кажется, что сам Doxygen генерирует сотни файлов графиков, а Graphviz просто точно генерирует графики для каждого из них. Есть ли способ заставить Doxygen генерировать один большой графический файл вместо сотен меньших?

В качестве альтернативы, существуют ли какие-либо бесплатные визуальные графические решения, которые знают, как обрабатывать сложные файлы проектов C++ с вложенными директивами процессора pre -, интерфейсами MIDL и определенными вручную путями включения, как это делает Doxygen?

Мои поиски находят общие графические утилиты (или вопросы о них ), но ничего особенного для больших проектов C++. Конечно, со всем кодированием, которое было сделано за эти годы, у кого-то должен быть такой инструмент!

Спасибо, -Алекс

10
задан Alex Jansen 25 July 2012 в 18:32
поделиться