c++ - 使用 Doxygen + Graphviz 可视化一个巨大的 C++ 项目

标签 c++ doxygen graphviz dot

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

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

DoxygenDDLCommInfC DoxygenDDBItemBase

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

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

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

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

谢谢, -亚历克斯

最佳答案

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

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

关于c++ - 使用 Doxygen + Graphviz 可视化一个巨大的 C++ 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11656311/

相关文章:

doxygen如何超链接到相关页面

c - 如何通过 graphviz 编辑图形?

graph - 更改图形的大小(宽度和高度)(GraphViz & dot)

c++ - 从指针的 QList 中移除元素

c++ - 动态创建 DateTimeAxis QML 图表 SplineSeries

python - __init__.py 文件上的 doxygen 窒息

带有俄语节点和边的 Graphviz : edge label has offset and Node is enlarged

c++ - 32位机器如何计算 double

c++ - C++/CLI 中的值类

doxygen - 是否可以将 doxygen HTML 输出中的参数保留在一行?