我接手了一个庞大的C++项目,需要将其移植到Linux。该项目包含超过300个文件和20万行代码。如果能够有一个可视化的依赖和包含关系树,我就可以更好地了解应用程序的内部结构,并定位核心模块和Windows头文件之间的“故障线”,以便稍后进行存根操作。
Visual Studio中的类查看器并不能满足我的需求。我搜索了一下,了解到Doxygen是常用的列出依赖项的工具。但我相对比较视觉化,发现这并没有什么帮助。幸运的是,我了解到了Graphviz插件,使用名为“Dot”的工具,使我能够生成部分的依赖树。但不幸的是,针对特定文件产生了数百个较小的依赖树,而不是我所希望的一个大的依赖树。以下是一些示例:
正如您所见(希望如此),当图形变得太大时,Doxygen/GraphViz似乎会放弃并使子节点变灰色。然后,如果我想查看树下的内容,就必须转到该特定节点的图形中。这不仅限制了图形的可视化帮助性,而且如果子节点依赖于原始图形中的任何节点,则这些节点将再次显示。这导致出现大量重复连接,使得难以从任何给定文件中概念化地隔离图形。因此,我感觉就像是“放大”,但仍然无法看到整个画面。
我尝试在Doxygen的Expert视图中使用DOT_GRAPH_MAX_NODES设置进行操作,但这似乎并没有影响所生成图形的范围。从任何给定运行生成的输出来看,似乎Doxygen本身正在生成数百个图文件,而Graphviz只是忠实地为每个文件生成图形。是否有任何已知的方法可以使Doxygen生成一个大的图形文件而不是数百个小的文件?
或者,是否有任何免费的可视化图形解决方案可以像Doxygen一样处理具有嵌套预处理器指令、MIDL接口和手动定义的包含路径的复杂C++项目文件?
我的搜索结果发现了一些常规的图形实用程序(或涉及这些程序的问题),但没有关于大型C++项目的具体信息。随着多年来编码量的增加,肯定有人拥有这样的工具!
谢谢, -Alex