免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5266 | 回复: 7
打印 上一主题 下一主题

[其他] 如何阅读源代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-13 17:42 |只看该作者 |倒序浏览
如何读源码
有个朋友看了我的博客,发信问我如何读源码。说实话,我在读源码的过程中也并不顺利。
最初,我希望能好好读读linux的源码,可惜的是linux太庞大了,虽然学了不少时间,但是觉得还是前路遥遥。有时也感觉庞大的代码库有些无处下手,才选择了eCos。eCos体积非常小,感觉读起来轻松很多,有了linux的一些学习基础,对理解ecos也很有用处。
现在已经进入开源时代,有很多开源的项目,大量的代码需要读。如何读源代码可能是很多人面临的问题吧。我想,根据自己的经验教训,总结一些想法,希望对别人,对自己都能有所启发。

1 耐心和坚持
  读代码很枯燥,所以需要耐心和坚持。其实,学什么都一样吧。
2 实践
  很多时候多跑一跑能够更清楚的得到结果,而且有的时候光读,理解不一定正确,必须跑起来才心里有底。  说这个也是因为我自己比较懒得动手,所以吃了不少亏。
3 分治
  即分而治之。遇到一个大问题总是会有望洋兴叹之感。可是,如果能把一个大问题划分诸多小问题,马上会感觉目标清晰很多。 当每解决一个小问题,也能知道自己离最后的目标有多远。
4 多方面入手
  前面提到分治,但是在读源码时,如何将诸多代码进行划分呢?
  依据我的经验,提供以下3个思路:
  一、根据运行流程,程序就是一个执行流程,根据执行流程将程序划分出若干运行阶段,然后再逐步求精。
  比如,我前面的系列文章:《Redboot(i386)启动流程》就是完全按照执行流程来分析的。
  根据运行流程读代码的时候,就要尽量打开项目本身的DEBUG信息,或者自己添加一些代码测试,确认运行状况。
  二、根据项目组织结构和编译过程。项目本身会划分诸多模块,通常根据makefile可以大致了解项目的组织情况。
  另外,了解项目编译过程对理解项目也是非常有用的。
  三、从一些主题入手,比如对于ecos,可以提出很多主题,比如:跟踪收发包过程去了解其网络处理流程,跟踪命令执行过程,跟踪中断处理过程等等。
  从不同侧面了解你所读的代码,会让你对整个项目有更清晰的认识。
  读代码的时候,经常会碰到读到没有路的感觉,或者不想读下去了。这时候,换个思路,换个目标,也许就能再继续下去。有的时候,分兵出击,会起到意想不到的效果。

5 记录
  当一段代码读完,尽量记下来自己的理解,否则回头再看,又没有印象了。人们有时候喜欢太高估自己的记忆力,我以前特别不喜欢记,后来不得不记了。可是,有时候,时间一长,甚至自己记得东西都不太看得懂了,呵呵。
6 学习相关知识
  对编译工具 make(makefile), gcc要了解,对嵌入式软件还需要对cpu有了解。另外了解链接和程序加载过程(ld,loader and linker)也是很有帮助的。
  开源项目的编译和环境搭建大多在linux下,所以对linux,shell等也都要了解。
  这些东西内容不少,要慢慢来,还是要坚持和耐心,多动手。
7 借鉴别人的思路,多参考书
  学linux有不少书,比如:《linux 0.11源代码完全中文注释》《LINUX设备驱动程序》都很不错,
  学ecos,现在看到最好的就是:《EMBEDDED SOFTWARE DEVELOPMENT WITH ECOS》
  虽然,有几本中文书感觉并不是很好,不过还是可以参考一下。
  网上也有不少关于ecos/redboot的小文章,也挺不错的。
8 目标明确,急用先学
  有明确目标的学习通常效果最好,很多时候不一定有时间完完全全把一个项目了解清楚才能用。
  项目来了,找到明确目标,就去学,分清长线和短线。学以致用。
大概想了这么些。很多事情刚开始起步都很难,不过慢慢做就会越来越熟练,越来越有经验技巧。
所以,我才认为耐心和坚持最重要 ^_^

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
2 [报告]
发表于 2012-05-13 17:50 |只看该作者
我还以为是软文呢。

看Unix v6的代码吧。记得塑料袋回忆自己刚入行看v6时说,看懂不关系,背下来再说。人家都背下来了,如果你还觉得庞大,这让你情何以堪啊。

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
3 [报告]
发表于 2012-05-13 18:29 |只看该作者
回复 1# tsb831211


赞一个!


   

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2012-05-13 20:33 |只看该作者
回复 1# tsb831211
我觉得最关键的是学以致用。不能为了读源码而读源码,最好是项目驱动式的。

   

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
5 [报告]
发表于 2012-05-14 10:09 |只看该作者
回复 4# 瀚海书香

必要的储备也是必须的。现学现用有时候来不及
   

论坛徽章:
2
2016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之广夏
日期:2016-12-07 08:32:11
6 [报告]
发表于 2014-03-09 23:02 |只看该作者
赞一个,我正在准备学习呢

论坛徽章:
1
15-16赛季CBA联赛之山东
日期:2016-08-09 14:05:01
7 [报告]
发表于 2014-04-22 09:54 |只看该作者
比如呢,举一个实际的例子,具体的项目什么的
   

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
8 [报告]
发表于 2014-04-22 10:22 |只看该作者
回复 7# 1w2b3l
比如呢,举一个实际的例子,具体的项目什么的

这个要看你所在的环境了。比如优化你项目中使用的文件系统、为应用开发人员提供内核层统计性能的工具。。。。

参加开源项目,跟踪netdev或者ext4邮件列表,尝试修复bug和优化代码。。。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP