2009-07-16 49 views
2

当你得到一个第三方库(C,C++),开源(LGPL说),不具有良好的文档,什么是去理解它的最好方式能够融入你的应用程序?阅读理解/第三方代码

库通常具有一些示例性的方案和我最终用gdb遍历代码。任何其他建议/最佳做法?

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

回答

5

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

  • GNU Global。它生成交叉引用数据库,并可以从源代码生成超链接的HTML。点击函数调用将引导你进入他们的定义,你可以看到所有函数引用的列表。只适用于C和C++。
  • Doxygen。它从Javadoc风格的评论中生成文档。如果你告诉它为未记录的方法生成文档,它会给你很好的总结。它也可以产生超链接的源代码列表(并且可以链接到由htags提供的列表)。

这两个工具,只是在Emacs中读取代码并使用递归grep进行一些搜索,是我如何执行大部分源逆向工程。

1

其中一个更好的方法来理解它是试图自行将其记录下来。通过去尝试自己记录它,它会迫使你真正潜入并测试,测试和测试,并确保你知道每个语句在什么时候都在做什么。然后,你可以真正开始理解以前的开发人员可能一直在想什么(或者没有考虑过这个问题)。

0

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

0

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

1

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

有一两件事,我接近,我已经继承或者大型项目或有助于自动生成它们的来源,UML图的时候做的,任何可以缓解各种量A.D.D.的遇到学习一个新的项目:)

时,我相信有人在这里已经提到Doxygen的,这是一个伟大的工具!你应该仔细研究它,并编写一个小的bash脚本,它会自动为你正在开发的应用程序生成源代码,并以你设置的树状结构为基础。那我还没有看到有人提起

一件事是BOUML!这太棒了,免费!它自动从现有源生成反向UML图,并支持多种语言。在我开始阅读代码之前,我将它作为一种方式来真实地捕捉关于架构和设计方面正在发生的事情的大图。

如果您有足够的资金,请查看%language-here%的了解情况。这绝对是非常棒的,并且在继承遗留代码时以多种方式帮助我。

编辑:

试用ACK(betterthangrep.com),它是用于搜索源代码树:)

0

真的有很方便的脚本是不是不只是卷起你的袖子其他银弹并深入代码。

这是我们赚钱的地方。

0

三件事; (1)尝试运行可用的测试或示例应用程序,设置较低的调试级别并遍历日志。 (2)使用源代码浏览器工具/ cscope(可在Windows和Linux上使用)并浏览代码以了解流程。 (3)同时使用gdb在运行测试/示例应用程序时进入代码。