如何阅读程序源代码?

方法?工具?技巧?
关注者
883
被浏览
34135

17 个回答

阅读源代码的第一个工具,就是你手中的code base。把它编译出来,运行它,加log,试着修改一些数据和代码,看看有什么变化。

第二个重要的工具就是debugger,而debugger最重要的功能是获取call stack。在你感兴趣的use case里pause一下,在你不知道有什么用的函数里加个断点,显示出来的call stack都能让你对系统有更清晰的认识。

一个软件系统就是一个小宇宙。别期待有什么高明的文档。要把自己当成探求自然真理的物理学家。
  1. 必须找好切入点。你要解决什么问题。是要fix bug;还是要把这个系统和其它模块集成;还是要增加新功能。物理学家没有上来就研究整个宇宙的,必须选好分支。
  2. 如果你有一个猜想,但是又和你的目标关联不太大,那就坚持这个猜想,直到出现明显反例。物理学有很多这样的例子,和数学不同,为了旁支猜想投入过多研究是不明智的。
  3. 如果有明显证据证明你的某个旁支猜想大错特错,你就要放弃主要目标,暂时把解决旁支猜想作为主要目标。比如,你本来以为某个结构是LRU的cache,结果发现怎么做都不对,那就先放弃原来的目标,专门研究这个结构的用途。
  4. 对于旁支猜想的不断切换,要做好自己的task stack保留。在旁支猜想解决之后,要根据结论尽快回到上次中断的任务。

复杂的软件系统更像一个动物,待久了你会了解它的脾性。有些是通过逻辑,有些是通过感觉。玩车的尚且有这种感觉,我们玩的东西比车复杂上万倍,就更不能对它缺乏感情投入。(这也是我不爱做企业开发的原因,我不爱养个爬行类当宠物,还是猫猫狗狗的亲切。)
在cnblog上看到一篇日志《如何看懂源代码--(分析源代码方法)
主要分六个部分
( 1 )读懂程式码,使心法皆为我所用。
(a)读懂别人写的程式码,让你收获满满
(b)先了解系统架构与行为模式,再细读
(c)熟悉沟通语言与惯例用语
(d)掌握程式码撰写者的心态与习惯
( 2 )摸清架构,便可轻松掌握全貌。
(a)阅读程式码的目的,在于了解全貌而非细节
(b)由上而下厘清架构后,便可轻易理解组成关系
(c)了解架构,必须要加上层次感
(d)探索架构的第一件事:找出系统如何初始化
( 3 )优质工具在手,读懂程式非难事。
(a)善用文字编辑器或IDE中,加速解读程式码
(b)grep按(读者:推荐来源透视)是一个基本而极为有用的工具
(c)gtags可建立索引,让搜寻更有效率
(d)再搭配htags制作的HTML文件,更是如虎添翼
( 4 )望文生义,进而推敲组件的作用。
(a)好的说明文件难求,拼凑故事的能力很重要
(b)探索架构的第一步─ ─找到程式的入口
(c)系统多会采用相同的架构处理插件程式
(d)随着实务经验,归纳常见的架构模式
(e)善用名称可加速了解
( 5 )找到程式入口,再由上而下抽丝剥茧。
(a)展开的同时,随手记录树状结构
(b)无法望文生义的函式,先试着预看一层
(c)根据需要了解的粒度,决定展开的层数
( 6 )阅读的乐趣,透过程式码认识作者。
(a)阅读程式码是新时代程式人必备的重要技能
(b)好的名称能够摘要性地点出实体的作用
(c)转换立场,理解作者的思考方式
(d)从程式码着手认识作者独有的风格,进而见贤思齐