В основном мне нужны инструменты, которые генерируют визуализацию исходного кода, например:
Вы можете попробовать CppDepend (cppdepend.com), где вы можете сгенерировать граф вызовов функций / графики зависимостей и отфильтровать элементы на графике с помощью CQLinq. CppDepend бесплатен для участников с открытым исходным кодом.





Возможно, это дублирование, но обратите внимание, что ollydbg, IDA Pro и этот сайт имеют целую кучу ресурсов с некоторыми очень привлекательными изображениями.
Doxygen действительно отлично подходит для этого, хотя вам нужно будет установить GraphViz, чтобы рисовать графики.
После того, как вы все установили, рисовать графики действительно довольно просто. Убедитесь, что вы установили для ИЗВЛЕЧЬ ВСЕ и CALL_GRAPH значение true, и все будет в порядке.
Полная документация по этой функции для doxygen - здесь.
Милая. Очень просто использовать. GraphViz изменяет ваш системный путь, а doxygen использует его.
+1 Согласен. Doxygen - очень полезный инструмент при изучении существующего кода. Отметьте опцию генерации исходного кода, и вы легко сможете перемещаться по базе кода, не открывая редактор кода ...
Не забудьте также HAVE_DOT = YES
Вы можете посмотреть различные инструменты для проектирования и моделирования программного обеспечения (Рациональная роза, Архитектор Sparx Enterprise, Umbrello и т. д.). Большинство из них имеют некоторые функции для обратного моделирования по исходному коду и получения диаграмм классов UML, а иногда даже диаграмм последовательностей (и это очень близко к графу вызовов функций).
Но после того, как вы получите несколько изображений действительно большой базы кода проекта, вы сможете понять, что такие графики довольно трудно читать и понимать. К сожалению, возможности визуализации сложности очень ограничены.
Как по мне, использование идиомы «разделяй и властвуй» - более удобный подход. Вы можете извлекать различные функциональные блоки или слои из некоторой базы кода (иногда достаточно просто сортировки cpp-файлов по разным папкам). Другой способ - использовать некоторые скрипты (bash, python) для создания простых таблиц csv с интересующими параметрами файлов, классов или функций, таких как «количество зависимостей» и т. д.).
Я настоятельно рекомендую BOUML. Это бесплатное приложение для моделирования UML, которое:
Итак: импортируйте свой код в BOUML и просмотрите его там или экспортируйте в SVG и просмотрите его в Firefox.
Для бесплатной версии:
Установщик Windows для 4.23.7 можно найти на той же странице sourceforge, что и Douml, в разделе "Файлы".
Если вы используете Visual Studio, выпуск 2010 Ultimate позволяет создавать диаграммы последовательности и графы зависимостей. Однако этот выпуск в настоящее время поддерживает только проекты приложений .NET.
Команда проявляет большой интерес к поддержке C++ в будущих версиях, так что вы можете следить за обновлениями. А пока вы можете оставить сообщение на форуме VS 2010 Architectural Discovery и инструменты моделирования по адресу http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads, чтобы запросить обновление. Я знаю, что команда разработчиков любит слышать отзывы клиентов об инструментах.
А пока вы можете узнать больше о создании диаграмм последовательностей и диаграмм зависимостей из кода .NET в следующих разделах:
Как: найти код с помощью обозревателя архитектуры: http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx
Как: создавать графические документы из кода: http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource
Как: изучить код с помощью диаграмм последовательностей: http://msdn.microsoft.com/en-us/library/ee317485%28VS.100%29.aspx
Чтобы опробовать выпуск RC и оставить отзыв, загрузите его по адресу http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a
В дополнение к написанным выше инструментам вы можете попробовать понимать. Но это не бесплатно.
У них есть пробная версия, которая может быть весьма кстати.
Вы имеете в виду зависимости в интерфейсах (например, диаграммы наследования) или зависимости в реализациях (граф вызовов, например, есть ребро от функции A к B, если A вызывает B в своем теле)?