如何阅读大型工程的源代码

    注:此博文是看到国外的一篇同等标题的文章,按照自己的理解翻译,增加了部分自己的项目经验整合而成。

    ‍由于工作的原因,几个月前开始接触开源软件freeswitch, 由于没有做过开源的项目,所以走了不少弯路。请教别人,加上长时间的阅读,总算是入了门。想写下关于如何开始阅读源码的文章,英文搜索了下,找到一篇,翻译加上自己的项目经验,如下:

    1、熟悉整个代码的业务背景,知道整个代码是为了解决什么问题来实现的,需要熟悉整个业务的重要的主线。如:Freeswitch是一个IP软交换系统,主要的业务是打电话。主要业务主线是,摘机-->收号-->IP寻找号码-->回铃音等待对方摘机-->对方摘机开始通话-->对方挂机。还有被叫时的业务线等。个人认为,熟悉业务是非常重要的一步,你需要知道你的代码是为了什么而出现的。

    2、阅读源码的文档和目录结构。1)首先阅读工程中的"README"和"INSTALL"文档。 2)DOC目录下放的是其他相关文档,可以寻找阅读。3)source下放置的是工程的源码。4)build目录放置的是Makefile和对应的各种工具,用来编译的。 5)bin和lib文件夹放置的是工程生产的可执行和库文件。  一般走正常路线的代码是如此放置的,不走寻常路得代码,需要自行寻找。个人感觉,其实可以直接忽略这种源码。

    3、选择一款合适的代码阅读器或者更好的是IDE。IDE主要的功能是帮助你快速的找到函数,变量,结构体,类和宏的定义,并能找到他们并调用的地方,有的还可以找到函数调用其他的函数列表。翻译的文章中推荐QT creator,我自己使用的是 vim+ctags+cscope, 在windows平台下用的是source insight,这些都是大家常用到得。好的代码阅读环境,能大大提高效率,保证你阅读代码时思路的连续性。

    4、去理解代码的编码风格和主要缩写的意思。理解代码中的缩写能够帮助我们,看到缩写的命名快速的理解对应的函数、类型、变量等的意思。缩写和业务有关,只在此工程有效,如;HEVC工程的 ff 代表ffmpeg的接口,freeswitch中sp的缩写代表的是span的意思。

    5、找到函数、变量、类对象等在何时与哪些地方被调用。1)找到何时被调用,IDE一般带有设置断点功能,设置完断点,找到调用堆栈,能看到断点处调用的所有层次。 我用GDB设置断点,并通过bt命令看整个调用堆栈,能快速找到调用关系。 2)找到哪些地方调用,一般通过整个工程全子搜索就可以。cscope的find c 可以实现,source insight有对应的功能。

    6、增加打印日志和画代码流程图。1)猜测你认为的代码流程走向,并在你认为走到的地方增加自己的打印信息,运行程序,看看是否可以达到预期。整个和调试BUG时用到的原理一样,重要的一点是你要先判断哪个地方会调用,自己去主导代码。2)画代码流程图,根据你已经熟悉的流程,把代码流程图画下来,方便自己整理思路,也能预防阅读到后面忘记了前面的代码。图形的表现会远大于文字,大部分人刚开始都不愿意去画,包括我,后来感觉还是很有必要的。

    7、记录笔记。对比较重要的代码做笔记,笔记的形式没有规定,方便自己阅读。个人感觉这个功能,主要在于阅读一段代码到一半的时候,需要暂停时,并没有画流程图时使用。还有一个就是阅读特别混乱代码会用到。

 

 

 

 

 

 

你可能感兴趣的:(阅读源码)