C++代码可视化

10

这是一个与此问题相关的后续问题。

我正在努力掌握一个具有数百个类和大型继承层次结构的大型代码库。 我想能够一眼看到继承层次结构的“主要脉络”,而不是所有“外围”仅执行一些非常特定/专业化任务的类。Visual Studio的“查看类图”生成的图类似于火车,横向延伸在屏幕上,而且并不是很有组织,难以理解。

我刚尝试了doxygen和graphviz,但结果与Visual Studio相似。我得到了漂亮的调用图,但对于我想要的内容来说仍然有过多的细节

我需要一种快速生成继承层次结构的方法,以某种可折叠式视图呈现。

9个回答

7

为什么不手动操作呢?当你开始处理大型代码库时,这是一个很好的学习经验。我通常只看哪个类继承自哪个类,哪个类包含哪些实例、引用或指向其他类的指针。在旁边放一张纸,并开始画图...


1
我最终采用了火车图并对其进行了研究。然后我画了一张新的图表。这是一次有益的经历! - bobobobo

6

不必使用完整的Class Designer工具,只需使用Visual Studio中的“类视图”或“对象浏览器”即可 - 它们呈现了完全可折叠的类层次结构。


5
一款好的UML工具应该可以解决问题。
下面是一份通用的UML工具列表:http://en.wikipedia.org/wiki/List_of_UML_tools 有很多种工具可供选择,每种工具的功能集也不尽相同。建议尝试几个工具,看是否能得到所需的输出结果。如果免费的工具不能满足您的要求,可能需要花钱购买一款商业级别的UML工具。

4
您可以尝试使用CppDepend,它不像Doxygen一样创建类层次结构,但可以展示项目的“大局”,并显示一些代码指标。

3
我最成功的工具是使用valgrind和kcachegrind。您可以针对调试二进制文件运行valgrind,执行您感兴趣的任何操作,然后将输出导入到kcachegrind中,查看有关谁调用了什么、多频繁以及何时发生的所有信息。此外,由于您在动态进行分析,因此它可以捕获静态分析可能无法捕获的情况。
我还尝试过使用Enterprise Architect的反向工程功能,但效果不佳(但可以得到可用的UML模型,这很好!)。
最后,还有一个叫做“Understand”的工具。它非常适合静态面向对象分析,但价格相当高且使用范围不广。

2

如果您想购买价格合理的商业产品,您可以查看Vizlogix(www.vizlogix.com)的SolidSX。(如果您在北美以外,请前往SolidSource -- www.solidsourceit.com。)

它生成一个可以折叠和展开的径向图。它还与Visual Studio(BSC和.NET都支持)集成。


2

2

请查看SourceNavigator,它是开源的,在许多平台上都可以使用,并且具有层次结构浏览器、类浏览器、交叉引用浏览器等功能,可帮助您浏览和理解代码。

我现在已经使用它一段时间了,特别是当我需要查看和理解新代码时。


0
你对“主干”有什么定义?你需要一个图形缩减器或骨架化程序(你可以找到或编写一个并将其应用于Doxygen和其他工具生成的内容),或者,“主干”与代码的功能有关,我不认为自动化工具能帮助你解决这个问题。除非你能指出“这些是执行输入和输出的重要部分,只显示距离这些路径一两步的元素”。嗯,听起来像是一个很棒的工具要写 :)

...继承层次结构,以某种可折叠的视图呈现。

再次,这是一个很棒的工具的想法!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接