Существуют ли какие-либо инструменты для визуализации методов шаблона / класса и их использования?
-
09-06-2019 - |
Вопрос
Я изучил большую базу кода и хотел бы получить общее представление о том, как и где используются определенные классы и их методы.
Есть ли какой-нибудь хороший инструмент, который может каким-то образом визуализировать зависимости и нарисовать красивое дерево вызовов или что-то подобное?
Код находится на C ++ в Visual Studio, если это поможет сузить какой-либо выбор.
Решение
Вот несколько вариантов:
Последний, doxygen, является скорее автоматическим инструментом документирования, но он способен генерировать графики зависимостей и диаграммы наследования.Он также лицензирован под лицензией GPL, в отличие от первых двух, которые не являются бесплатными.
Другие советы
Когда я использовал Doxygen, он создал полный список абонентов и абонентов. Я думаю, что вы должны включить его.
Дэвид, спасибо за предложения. Я провел выходные, пробуя программы.
Doxygen, кажется, является наиболее полным из трех, но он все еще оставляет желать лучшего в отношении вызывающих методов.
Кажется, что все 3 имеют проблемы с шаблонами C ++ в той или иной степени. CC-Rider просто разбился в середине анализа, и CodeDrawer не показывает многих взаимосвязей. Doxygen работал довольно хорошо, но он также не обнаруживал и не отображал все отношения и вместо этого перегружал меня большим количеством ссылок на макросы, пока я не отфильтровал их.
Так что, может быть, мне следует уточнить "большую кодовую базу" немного о возможных других предложениях: > 100 000 строк кода в целом распределены по более чем 100 файлам шаблонов плюс несколько файлов классов, собрав их все вместе.
Есть ли еще какие-нибудь инструменты, которые могли бы быть полезны для задачи и могли бы работать лучше (более тщательно)? Да и конкретно: что-нибудь, что понимает интерфейсы IDL и COM?
Когда я использовал Doxygen, он создал полный список абонентов и абонентов. Я думаю, что вы должны включить его.
Конечно, я это сделал, но, как я уже говорил, doxygen не рассматривает интерфейсы между объектами, как они определены в IDL. Это "только" показывает прямые вызовы C ++.
Не поймите меня неправильно, это уже удивительно, что он делает, но это все еще не завершено с моей точки зрения высокого уровня, пытаясь получить хорошее понимание того, как все сочетается друг с другом.
В Java я бы начал с JDepend. В .NET, с NDepend. Не знаю о C ++.