当你得到第三方库(c,c ++),开源(LGPL说),没有好的文档时,理解它的最佳方法是什么才能集成到你的应用程序中?
库通常有一些示例程序,我最终使用gdb遍历代码。还有其他建议/最佳实践吗?
举个例子,我刚从sourceforge.net选了一个,但这只是一个广泛的工程/编程问题: http://sourceforge.net/projects/aftp/
答案 0 :(得分:5)
我经常使用一些工具来帮助我:
这两个工具,以及只读取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在运行测试/示例应用程序时进入代码。