11

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

Visual Studio 中的类查看器根本没有削减它。我四处阅读,了解到 Doxygen 是列出依赖项的常用工具。我更像是一个视觉化的人,发现这并没有太大帮助。幸运的是,我了解了 Graphviz 插件,它使用了一种叫做“Dot”的东西,它使我能够为部件生成依赖关系树。不幸的是,为特定文件生成了数百个较小的依赖关系树,而不是像我希望的那样拥有一个大的依赖关系树。这里有几个例子:

DoxygenDDLCommInfC DoxygenDDBItemBase

如您所见(我希望),当图形变得太大并且子节点变灰时,Doxygen/GraphViz 似乎放弃了。然后,如果我想查看树下方的内容,我必须查看该特定节点的图表。这不仅限制了图形的视觉帮助,而且如果子节点依赖于原始图形中的任何节点,这些节点将再次显示。这会导致大量重复连接,这使得从概念上将图形与任何给定文件隔离开来非常困难。结果,我感觉自己被“放大”了,仍然看不到全貌。

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

或者,是否有任何免费的可视化图形解决方案知道如何使用嵌套的预处理器指令、MIDL 接口和手动定义的包含路径来处理复杂的 C++ 项目文件,就像 Doxygen 那样?

我的搜索是查找通用图形实用程序(或有关它们的问题),但没有特定于大型C++ 项目的内容。当然,多年来完成的所有编码都必须有人拥有这样的工具!

谢谢,-亚历克斯

4

1 回答 1

6

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

当图形数量很多时,Doxygen 自动调用 graphviz 最有用。对于单个图,自动创建内容很重要,但自动调用dot,没那么重要。

于 2012-07-25T18:37:28.180 回答