使用Doxygen + Graphviz可视化巨大的C++项目

Ale*_*sen 10 c++ doxygen dot graphviz

我继承了一个需要移植到Linux的大型C++项目.该项目中有超过200,000行源,分布在300多个文件中.有一个可视依赖/包含树来引用这个项目是非常有帮助的,这样我就可以对应用程序的内部结构有一个总体的感觉.这也可以帮助我找到核心模块和Windows头文件之间的"故障线",以便我可以在以后将它们存根.

Visual Studio中的类查看器根本就没有剪切它.我正在四处阅读,并了解到Doxygen是列出依赖关系的常用工具.我更像是一个视觉人,发现这不是那么有用.幸运的是,我了解了Graphviz插件,使用了一个名为"Dot"的东西,它使我能够为部件生成依赖树.不幸的是,为特定文件生成了数百个较小的依赖树,而不是像我希望的那样拥有一个大的依赖树.以下是几个例子:

DoxygenDDLCommInfC DoxygenDDBItemBase

正如你所看到的那样(我希望),Doxygen/GraphViz似乎在图形变得太大并且使子节点变灰时放弃了.然后,如果我想看看树下面还有什么,我必须转到该特定节点的图表.这不仅限制了图形的视觉效用,而且如果子节点依赖于原始图形中的任何节点,则将再次显示这些节点.这导致了许多重复连接,这使得从任何给定文件概念上隔离图形变得非常困难.结果,我觉得我"放大了",但仍然无法看到整个画面.

我尝试在Doxygen的Expert视图中使用DOT_GRAPH_MAX_NODES设置,但这似乎不会影响正在生成的图形的范围.从任何给定运行产生的输出,似乎Doxygen本身产生了数百个图形文件,而Graphviz只是忠实地为每个图形文件生成图形. 是否有任何已知的方法使Doxygen生成一个大图形文件而不是数百个较小的图形文件?

或者,有没有任何免费的可视化图形解决方案,它们知道如何处理复杂的C++项目文件与嵌套的预处理器指令,MIDL接口和手动定义的包含路径Doxygen的方式?

我的搜索是查找一般图形工具(或有关它们的问题),但没有特定于大型 C++项目.当然,多年来所做的所有编码都必须有这样的工具!

谢谢,-Alex

Ben*_*igt 5

您可以使用doxygen生成的XML文件,并将它们合并为一个巨大的点格式图形文件(使用xml样式表或类似文件),然后在其上运行graphviz.

当图表数量很高时,Doxygen会自动调用graphviz.对于单个图表,自动创建内容很重要,但自动调用dot,而不是自动调用.

  • @Alex:对同一节点名称的所有引用都会折叠到图表上的单个节点中。这就是 graphviz 语言的工作原理。(我鼓励刚接触 graphviz 的你在抱怨之前先尝试一下我的建议。) (2认同)