我一直想帮助一个开源项目一段时间。我想这样做有两个主要原因。我是化石的强力支持者,我想获得经验。
我一直在努力寻找一个我认为我想要帮助的项目。我想帮助很多,但是对于我想要开始的东西来说,它们很复杂。然而,我最近发现了一个浏览器,uzbl,这对我来说似乎足够复杂,无论多么简单,我都可以自己动手。
这是一个使用webkit和gtk的简单轻量级浏览器。
现在你熟悉我的位置,这是我的问题。
了解代码库的最佳方法是什么?
现在我意识到这是一个主观问题。但是,如果我有更多有经验的开发人员的建议,我觉得我可以减少错误的转变。
我应该熟悉首先使用的库吗?或者,在我对全局图片有基本的了解之后,我是否应该查看核心代码并关注我自己的内容?
你们如何理解新项目的代码库?
感谢您的时间和精力。
答案 0 :(得分:3)
首先,编译并运行它。对于许多项目,只需完成该任务就会给你一些理解: - )
其次,要解决一些问题是件好事。一些小任务,比如在某处修复一个小错误。只需调试,搜索bug来源,尝试修复它。然后运行单元测试(如果有的话),看看你修复了什么。也要调查一下。
然后重复一遍。十几个错误,最好是在不同的区域,可以更好地理解代码库。
在那之后,我通常会开始思考产品,看看它是如何工作的并且玩它。天生的好奇心迟早会接管,我发现了一个让我感兴趣的功能。在“哇,我想知道它是如何工作的”的方式。然后我尝试自己为该功能绘制一个高级设计。按照“如果我必须创建这个功能我该怎么做?非常简短,只是在我的脑海里,没有花哨的图表和诸如此类的东西。
这样做,我不可避免地发现自己需要了解更多有关系统的信息:毕竟,你无法设计一个完全独立的功能,是吗?你必须与系统的其他部分进行交互,你需要知道如何。所以我进入代码并找出答案。
然后,当我意识到我真的不知道如何设计该功能的这一小部分时,可能会出现。我想,我想,我想,我只是不知道。然后是最甜蜜的部分:我进入代码,看看它是如何设计的。有时我会对这个项目感到失望。但更多时候,我会对自己感到失望。但这正是宝贵的:这就是我学习的方式。
答案 1 :(得分:1)
我发现了两件事(除了Fyodor Soikin的回答之外)真的有帮助。一个是让doxygen为我记录一切。当我可以通过函数声明并单击应该传入的数据结构时,它会变得更加容易,因此我可以看到它包含的所有成员(如果没有当前文档,您可以设置EXTRACT_ALL = YES )。我还发现使用debuggin符号编译项目然后在gdb中运行它非常有用,这样你就可以从头到尾跟随它。
答案 2 :(得分:0)
我会首先寻找他们的测试,看看那些。如果没有测试,我可能不会打扰这个项目。如果有测试,他们应该对软件的工作方式有所启发。逐步完成调试器中的测试,以了解高级组件如何组合在一起。