82

您是否有任何工具可以简化理解 C/C++ 代码的任务?我们只是继承了别人编写的一大块软件,我们需要快速上手。关于可能简化此任务的工具的任何建议?

4

16 回答 16

27

SourceInsightUnderstand for C++是您可以获得的用于c/c++ 代码分析(包括流程图)的最佳工具。

于 2008-09-30T13:56:10.747 回答
9

分析软件让您了解调用了哪些函数。

如果您可以使用 Linux,请尝试使用KCachegrind

于 2008-09-30T13:51:42.910 回答
9

如果您打开 EXTRACT_ALL 选项, Doxygen非常擅长从代码生成图表而不应用标记。您需要安装GraphViz才能使用 HAVE_DOT 设置生成图表。我发现安装它并将 DOT_PATH 留空在 Windows 上可以正常工作,但在 OS/X 上必须直接指向点工具位置。

ACM Queue 中有一篇出色的Code Spelunking文章,其中更多地讨论了使用 doxygen 和 DTrace。

于 2009-01-26T04:15:09.857 回答
8

就个人而言,我使用调试器。运行代码,看看它在做什么,它的去向是唯一的方法。

但是,您可以通过一些(有时)提供帮助的文档生成器来运行它。一个很好的例子是doxygen

于 2008-09-30T13:51:19.043 回答
5

KScope,基于 cscope 实用程序构建,如果您使用的是 linux (KDE)。我曾经使用过(并且一直使用)的最好的东西来深入研究一些我必须以某种方式修改的巨大的不熟悉的代码,或者我将使用哪个 API 来满足我的需要。它的功能之一是交叉引用数据库,可以通过多种方式进行搜索:您可以找到符号的所有引用、其全局定义、查找函数的调用者/被调用者等等。它甚至有一个内置的 IDE 和显示调用图的能力。

于 2008-10-01T07:53:19.880 回答
4

如果您使用 graphviz, Doxygen会为您提供类关系图,即使您没有专门为此做好准备。

于 2008-09-30T13:51:32.677 回答
3

有一些像埃及http://www.gson.org/egypt/egypt.html这样的工具可以工作,但前提是您匹配用于编译代码的预期 GCC 版本和调用图生成器的确切版本。关于codeviz http://www.csn.ul.ie/~mel/projects/codeviz/也可以这样说

其他选项是在 cachegrind 模式下使用的 valgrind(它生成一种调用图,您可以从 kcachegrind 程序中遵循该调用图。

于 2008-09-30T14:05:47.650 回答
1

我个人使用 Visual Studio 调试器工具。

它带有“来电图”功能,可让您在小框中可视化内容。调用堆栈和通常的手表功能通常也是我所需要的

于 2008-09-30T13:52:33.597 回答
1

还有AspectBrowser不能很好地与 Eclipse 3.4.0 配合使用

于 2008-09-30T14:00:59.207 回答
1

试试AQtime,它是一个分析工具,显示所有被调用的函数(以及它所花费的时间),您可以设置分析的起点和终点。他们有 30 天的试用期。

于 2008-09-30T14:04:37.950 回答
1

我不久前使用了Borland Together,它在从代码生成模型方面做得不错。我相信它甚至会从代码中生成序列图。请记住,如果您的代码一团糟,您的模型也会如此。而且我记得它并不便宜,但有时您可以买到特价商品。

于 2008-09-30T14:41:26.473 回答
1

Rational Quantify 还提供了一个很好的调用图。

于 2008-09-30T15:58:06.400 回答
1

i tried a tool named Visustin which is not very great graphically but does what it says: Flowchart from Code. http://www.aivosto.com/visustin.html

于 2011-06-30T01:39:26.893 回答
0

doxygen是一个免费的文档生成工具(类似于 Javadoc),它也可以生成关系图。

于 2008-09-30T13:52:29.883 回答
0

Doxygen,它的好处是它会让你知道锄头丑/好是你的代码在类的循环依赖方面。所以你将被迫重构你的代码,尽管你可能不喜欢它:-)

于 2008-09-30T13:54:37.367 回答
0

Slickedit 非常适合浏览你不知道的大块代码。标签功能允许您在功能的基础上处理代码,而不必处理它在哪个文件中。(EMACS 实际上有标签,并且与 Slickedit 一样好,但学习曲线稍微陡峭)

When you get to a method or class or variable you don't understand, you just push-tag to go to that code, look it over, then pop-tag back. (those are bound to keystrokes, so it is very quick)

You can also use find-references to see where that function/variable is used.

Saves tons of time over having to go and figure out which file something is in.

于 2010-12-03T20:16:21.207 回答