阅读/理解第三方代码

时间:2009-07-16 01:01:27

标签: c++

当你得到第三方库(c,c ++),开源(LGPL说),没有好的文档时,理解它的最佳方法是什么才能集成到你的应用程序中?

库通常有一些示例程序,我最终使用gdb遍历代码。还有其他建议/最佳实践吗?

举个例子,我刚从sourceforge.net选了一个,但这只是一个广泛的工程/编程问题: http://sourceforge.net/projects/aftp/

7 个答案:

答案 0 :(得分:5)

我经常使用一些工具来帮助我:

  • GNU Global。它生成交叉引用数据库,并可以从源代码生成超链接HTML。单击函数调用将转到其定义,您可以看到对函数的所有引用的列表。仅适用于C和C ++。
  • Doxygen。它从Javadoc样式的注释中生成文档。如果您告诉它为未记录的方法生成文档,它将为您提供很好的摘要。它还可以生成超链接的源代码清单(并且可以链接到htags提供的清单)。

这两个工具,以及只读取Emacs中的代码并使用递归grep进行一些搜索,是我进行大部分源逆向工程的方法。

答案 1 :(得分:1)

理解它的一个更好的方法是尝试自己记录。通过尝试自己记录,它会迫使您真正潜入并测试,测试和测试,并确保您知道每个语句在什么时间做什么。然后你就可以真正开始了解之前的开发人员可能在想什么(或者不考虑这个问题)。

答案 2 :(得分:1)

好问题。我认为应该彻底解决这个问题,所以我会尽量让答案尽可能彻底。

当我接近我继承或贡献的大型项目时,我做的一件事就是自动生成他们的源代码,UML图表以及任何可以减轻各种A.D.D数量的东西。在学习新项目时遇到:)

我相信这里的人已经提到了Doxygen,这是一个很棒的工具!您应该查看它并编写一个小的bash脚本,它将自动为您正在设置的树结构中开发的应用程序生成源。

我没有看到人们提到的一件事是BOUML!这真是太棒了!它自动从现有源生成反向UML图表,并支持各种语言。在开始阅读代码之前,我用它来真正捕捉建筑和设计方面的大局。

如果你有足够的钱,请查看了解%语言 - 这里%。它非常棒,并且在继承遗留代码时以多种方式帮助了我。

编辑:

尝试使用ack(betterthangrep.com),这是一个非常方便的搜索源树的脚本:)

答案 3 :(得分:0)

熟悉标题中提供的信息。您调用的函数将在那里声明。然后尝试确定函数的有效参数和前/后条件,因为这些是您的主要指导(即使它们没有记录!)。示例程序是您的下一个赌注。

答案 4 :(得分:0)

如果您有代码完成/智能感知,我喜欢打开图书馆然后去'。'或'namespace ::',看看会出现什么。我总觉得它很有帮助,您可以浏览对象/命名空间并查看它们具有的功能。这当然是假设它的OOP库具有相对较好的函数/对象命名。

答案 5 :(得分:0)

除了卷起袖子并挖掘代码之外,真的没有银弹。

这是我们赚钱的地方。

答案 6 :(得分:0)

三件事;

(1)尝试运行测试或可用的示例应用程序,设置低调试级别,并遍历日志。 (2)使用source navigator工具/ cscope(在windows和linux上都可用)并浏览代码以了解流程。 (3)同时并行使用gdb在运行测试/示例应用程序时进入代码。