赶快联系我吧!
您当前的位置:首页 > 网站源码

何如查看大型工程的源代码?

时间:2020-05-16  来源:帝国cms模板网  点击:

  我现在拿到了一个开源项目的源代码,大概有几十万行的C。短期来说□□□□,我需要对这些代码有一个初步的了解,以和另一个同等两级的闭源项目进行对比,然后做出选择。长期来说,我需要以这份代码为基础□□□,重构其中的一部分部件。所以我需要查看源代码□□□□,来对这个项目有一些了解。 作为一个新手,请问如何上手查看这样的大规模代码□□?有什么工具或者教程可推荐没□□□□?

  程序员在工作过程中□□□□,会遇到很多需要阅读源码的场景□□□□,比如技术预研、选择技术框架、接手以前的项目、review他人的代码、维护老产品等等。可以说,阅读源代码是程序员的基本功□□,这项基本功是否扎实,会在很大程度上影响一个程序员在技术上的成长速度。

  2014年写《Qt on Android核心编程》和《Qt Quick核心编程》时,很多内容都是通过分析Qt源码搞明白的。这阵子研究CEF和PPAPI,也主要靠研究源代码来搞明白用法。最近工作上要修改已有项目的一个子系统,也是得硬着头皮先读懂代码。

  总之在开发工作这十来年中,读过太多源码了,从源代码中学习到太多东西了,如果不阅读源代码,真不知道自己能否成长起来。

  写代码是从模仿开始的,提高也是从观摩别人的优秀设计和代码开始的。所以阅读源码至关重要□□□□,接下来咱从下列方面聊聊阅读源码的事儿。

  不同的目的会有不同的心情,会影响到工作的进展,像修复他人的Bug这种事情□□□□,类似于没被掰弯的男猿捏着鼻子给另外一个男人擦屁股□□,是很恶心的,很容易让人拒绝的。所以因这种目标而阅读源码□□□,往往是欲拒还迎、欲说还休,效率较低。然而修复实际工作中帮别人修复Bug这种情形,十有八九你要遇到,无可逃避。所以,心理调试很重要。

  为了学习去读源码,这是最愉快的最放松的。不过提醒一点,设定可检验的目标才会有收获,否则就会像走到大街上看见一美女擦肩而过那样,惊艳一下下□□,过后嘛关系嘛收获也没了。

  其他的目的,重构旧代码、添加新功能,比帮别人擦沟子(陕西话,屁股)略强,因为他带有创造性,创造性的活动能给人带来强烈的愉悦□□□,所以虽然这两种目的也有很多让人不爽的部分,不过想到我可以让一棵老树焕发青春,不爽也就慢慢弱下去了。

  工欲善其事必先利其器,这是亘古不变的道理。要很好的完成阅读源码的任务□□□,我们大概需要下列这些工具:

  SourceInsight,最好的源码浏览工具,它能维护符号库,动态显示上下文,还能绘制调用关系图,最好的,没有之一

  纸质笔记本□□,随时记录心得和疑惑□□□,随时绘制各种图(类图、时序图、框图),比UML工具快□□,也比Visio快

  记事本、Notepad++、有道云笔记、为知笔记等,记录阅读源码过程中的关键点、心得体会、分析过程

  扫描全能王(CamScanner)□□□,一款可以通过拍照达到扫描效果的App,可以用它扫描你在纸质笔记本上写下的文字□□□,绘制的框图,分享给其他人,如果你懒得用软件绘制图标□□□,那手绘之后扫描成电子档就最适合你了

  前戏很重要,准备好了后面水到渠成快感不断□□,否则就会频频受挫直感道阻且长。

  技术基础,这个源码用什么语言,什么框架,什么第三方模块□□□,都需要先有所了解

  文档,尽量找到业务、需求、概要、详细等文档,帮助会很大□□□,然而,我们经常面临的情况是,只有源码□□□□,只有源码,只有源码,片言只字的文档也无□□,所以只好坚信——源码是最好的文档。这个心理门槛儿其实也容易过,你就想像着源码只是神仙姐姐的画像,看再多画像也不抵当面一眼效果强大——要么摧毁三观要么魂牵梦萦

  人,搞明白哪个程序员维护过这份代码,方便后面不懂时请教□□,有时人家点一下顶你自己瞎琢磨一天

  配置好开发环境□□□□,目的是为了调试□□□□,对有些程序员来讲,调试是弄明白软件内部机理的最好方法□□,按着F5、F10、F11、F9□□,一切都搞定了

  配置好运行环境□□□,为使用软件、体验软件做准备,从用户角度□□□,从外面看看软件到底是怎么回事□□□,便于揣摩内部逻辑

  在阅读源码的过程中,做笔记是必须的。我有这样的体会,因为代码不是自己写的,很难很快在脑子里刻下印记□□□□,经常是看着这里忘了那里,早上觉得弄懂了数据流向□□□,中午吃个饭就忘了。所以,笔记就显得尤为重要。

  找到适合你的记录方式,小本本、软件皆可。用软件(Notepad++、有道笔记、为知笔记等)来记录有个坏处——必须切换屏幕,会在形式上中断代码阅读过程。所以我经常在紧张得不能中断时随手用笔写些断句残章在本子上,告一段落时梳理下用软件再记录。

  尽可能详细的记录,但不必看到什么记录什么□□□□,要间隔性的记录□□□□,比如弄明白了某个子模块的逻辑、某个类的作用、某些函数的调用关系时再记录,否则记录这个动作本身会打断思考

  每天工作结束,记录进度(弄明白的部分)□□□□,记录疑问□□,记录第二天要弄明白什么东西,这样你的工作状态就入栈了□□,第二天来了很容易出栈,快速进入工作状态

  找出关键代码(代表实际对象的类、衔接不同模块的类、代表业务关键节点的类)

  先用已有的可运行软件,体验业务□□□,琢磨你点这里一下点那里一下代码可能是怎么做出反应的

  阅读应该围绕目的,把实现目标放在第一位,比如修改Bug□□,如果有期限□□□,在最后日期前搞定是第一要务,然后有时间就继续读源码或改进Bug修复方案□□□□,力求没有副作用和后遗症,再有时间就修修别人留下的破窗户(你也可以顺带鄙视下前任维护者)

  千万次的问,还记得前面说要弄明白谁维护过你要读的代码吧,别不好意思□□,问吧□□□□,问吧,问吧

  心理调试□□,勿畏难,别放弃。我有时看代码,看两天也不知道看了个甚,一头雾水两眼发花是常有的事儿,有时真是觉得搞不定了,然而,这要么是你基础知识没准备好□□□□,要么是你找错了入口,要知道,任何一份代码,都有一条隐形的线串着,耐心点,总会找到。这样不行就那样,多换换角度,多换换方法,读不行,就调试,调试不行,就运行,运行不行□□□□,就研究日志,都不行,我靠,while(!i.isDead())i.analyzeCode()□□□,跟Y死磕□□!总之□□□□,你不放弃自己,就没人能放弃你□□□□!

  给自己设置小奖励□□□□,弄明白某个逻辑或某个模块的代码后奖励自己休息一下□□,5~10分钟,走出办公室转转,或者干脆在网上瞎逛一下,浏览自己喜欢的网站

  读不懂才要读,想不明白才要想,这是进步和成长的开始。那些阻挡你的蹂躏你的而杀又不死你的,终将帮助你成长让你变得更强大。

  你想更深入了解学习Linux知识体系□□□,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容:

  首先楼主放心,几十万行的项目不算大,几个核心的点通了以后就会发现好多代码没必要读。

  最好能跑起来□□□,这样你就可以打印出些信息(或者调试器查看),人脑容量就这么大,单靠走码会肾虚的。。。

  1.首先可以推荐一本书, code reading (Jolt大奖精选丛书:代码阅读(附光盘1张))

  1 搭建编译□□,运行,调试环境。可能需要安装虚拟机,安装相应的系统。就是要达到能编译,能运行的效果。

  2 搭建开发环境。推荐linux smb +windows sourceinsight,具体方法请自己搜索□□,这样的话开发环境搞定了□□□,阅读代码也方便了。vim难度有点大,暂时还是在win上soureinsight吧。

  3 找程序入口,不进子进程和具体函数,看整体流程。备份代码,然后开始按照自己想法在整体上修改。

  提醒:不要在一个点死抠,更重要的是整体流程。除非是你要修改的地方□□,要不然死抠无益。

  1.看Makefile,有时候Makeifle写得比较蛋疼□□□,就加打印,就能看到工程结构。

  2.看头文件,头文件有什么数据结构和接口□□□□,如果对业务逻辑熟大概能理解其代码设计。

  3.加打印,看具体业务逻辑,以调用链分析。其实可以先gcc -pg,然后看gprof的输出的。

  对于想在GitHub上一些很好的项目,无论你出于什么目的□□□,读懂它是非常有好处的□□□□,你可以看到优秀的代码是怎么写出的□□□,你也可以深入理解一些理论知识,所以读懂它是很必要的。

  至于怎么读懂□□□,最直接的办法就是根据使用实例输出结果,然后一步一步打印输出中间值□□,这样就事半功倍□□,你把所有的实例都输出一遍,你对代码也理解差不多了。注意,在代码中用注释的方法记录一些中间变量的值是很重要的□□□,因为下次在看的时候也许你会忘记。

  对于工作中具体遇到的源代码或者在GitHub上没有足够好的实例的代码,那就尽量按照软件理论中的输入□□,处理,输出过程阅读,看整个代码有什么输入,是怎么样处理的□□□,最后得到什么结果。个人认为只要你找到了输入□□□□,你把输入里清楚了,你阅读源代码的工作就完成了65%。读了很多源代码,输入找到了以后想要读懂就是时间问题了。


上一篇微软源代码片断宣泄 实质众达632GB

下一篇返回列表


发表评论 共有条评论
 
匿名发表


  服务流程
网站首页 | 关于我们 | 帝国模板 | 模板订制 | 联系我们
长期承接帝国模板制作,帝国CMS整站承建,企业建站,帝国采集规则,网站程序出售,功能二次开发,维护管理
Copyright@2009-2010 帝国模板 All Rights Reserved
联系QQ:872669523 联系电话:13188897052
鲁ICP备09030004号