如何阅读源码
❶ 如何读源代码
我以前,读代码一般是先看看程序包含哪些头文件,接着作者又定义了哪些宏,声明了哪些全局变量。(注意,除了头文件几乎每个程序都有之外,其他两项不一定都有。)
之后看自定义函数的原型,了解它们各是负责什么工作的(可以猜一猜)。对于具体的实现,先不看。(一般在主函数之后或其他文件里实现)
然后进入主函数,采用“逐行扫描”的阅读方式。直到主函数结束。
最后才去看那些自定义函数的具体实现。
另外,如果程序中还有“类”的话,那我会先去看一看类的接口,就是它能提供哪些操作。具体的实现都是读完主函数之后才看的。
当然这是我的习惯,我想各人有各自的习惯,所以仅供楼主参考,你应该有自己的习惯。
C++程序一般分为几个文件存放。我喜欢先看一看.h头文件里都声明了些什么。特别注意类的接口。然后进入主函数所在的.cpp源文件,从头到尾“逐行扫描”。最后才去看类的接口及自定义函数是如何实现的。
❷ 如何阅读源代码
《通用源码阅读指导书》易哥 写的一本书
❸ 如何阅读程序源代码
阅读源代码的第一个工具,就是你手中的code base。把它编译出来,运行它,加log,试着修改一些数据和代码,看看有什么变化。
第二个重要的工具就是debugger,而debugger最重要的功能是获取call stack。在你感兴趣的use case里pause一下,在你不知道有什么用的函数里加个断点,显示出来的call stack都能让你对系统有更清晰的认识。
一个软件系统就是一个小宇宙。别期待有什么高明的文档。要把自己当成探求自然真理的物理学家。
必须找好切入点。你要解决什么问题。是要fix bug;还是要把这个系统和其它模块集成;还是要增加新功能。物理学家没有上来就研究整个宇宙的,必须选好分支。
如果你有一个猜想,但是又和你的目标关联不太大,那就坚持这个猜想,直到出现明显反例。物理学有很多这样的例子,和数学不同,为了旁支猜想投入过多研究是不明智的。
如果有明显证据证明你的某个旁支猜想大错特错,你就要放弃主要目标,暂时把解决旁支猜想作为主要目标。比如,你本来以为某个结构是LRU的cache,结果发现怎么做都不对,那就先放弃原来的目标,专门研究这个结构的用途。
对于旁支猜想的不断切换,要做好自己的task stack保留。在旁支猜想解决之后,要根据结论尽快回到上次中断的任务。
复杂的软件系统更像一个动物,待久了你会了解它的脾性。有些是通过逻辑,有些是通过感觉。玩车的尚且有这种感觉,我们玩的东西比车复杂上万倍,就更不能对它缺乏感情投入。(这也是我不爱做企业开发的原因,我不爱养个爬行类当宠物,还是猫猫狗狗的亲切。)
❹ 如何去阅读并学习一些优秀的开源框架的源码
对于开发者来说,社区里丰富的开源代码其实是笔极为宝贵的财富。如果能充分利用好开放源代码的资源,不仅可以掌握多种编程方法,提高实践能力,还能获得好的思想,激发编程灵感。开源代码怎么学以及怎样才能学好是大家经常关注的话题,日前,在问答网站知乎上,有人抛出了“如何更有效地学习开源项目的代码?”的话题,众技术好手各抒己见,CSDN软件研发频道对本文内容进行了整理,方便大家学习与参考。盛大创新研究院研究员 庄表伟:学习开源 尽可能在代码里找答案 庄表伟提供了以下9个建议:1.在下载源代码之后,首先要跑起来,编译通过、正常运行;2.在你觉得最有可能运行到的地方,设置断点或者抛出异常,这样,就能够找到一个项目在正常运行时的入口点;3.从入口点所在的那个源文件开始阅读,逐步把握整个项目是如何启动起来;4.随便改点代码,看看会不会报错,如果报错,会从哪里报错;5.试着把报错屏蔽、修复、或者绕开;6.尝试理解一个系统的内部结构,多少组成部分,主线模块是哪些?辅助模块是哪些?7.从实际需要出发,修改这个项目,满足自己的某一个小的需求。(注意在此之前,尽量不要在网络上找答案);8.看看相关的讨论与心得,是否与自己的理解相一致;9.提交bug fix或者某个新的功能代码。在学习开源的过程中,有几个方面会获得大量收获,1.架构与模式;2.开源社区常见的一些惯用法;3.相关领域的结构与算法。总结一点:学习开源,尽可能在代码里找答案,而不是在代码之外找答案,那些都是二手的,而且很可能不准确。互联网评论员 朱晓阳:从简单做起 理论联系实践朱晓阳对此发表了两点看法:首先,从简单做起。刚开始的时候学习一些领域内基础理论,然后找一些简单的东西去实现,不能一开始就去找开源项目。建议大家经常动手写一些小程序,如改进宿舍网络登录客户端等。积小成多,能显着提高自己的编程能力。其次,学习的知识一定要和自己生活或工作有联系,这样才会有乐趣或动力。互联网评论员孙竟:先构想一个想做的项目首先,构想一个想做的项目(比如论坛、博客、微博等);然后,思考需要什么功能,应该怎么去实现,尽可能包括各种细节,有必要时记录下来;最后,去找个类似的开源应用,看看它是怎么实现的,和你的想法有什么差异,有什么可以学习或需要改进的地方。互联网草根hqman:我的5个建议:1.反复地使用软件,熟释软件的组成文件和软件功能,注意IE地址栏内的地址变化;2.打开数据库文件或存放数据的XML文件,参照数据字典了解各个表和字段的数据含意;如果没有数据字典,就运行软件输入数据,参照所输入的数据,了解各个表和字段的数据含义;3.利用Visio进行反向工程,将类图抽出来;4.研究类之间的关系,注释各个类的属性和方法,弄清程序的整体框架;5.另开一个项目,按照软件开发的流程,将代码分段复制进新的项目,进行编译调试,关注一些实现细节,学习一些编程的技巧。在读研究生张伟:在校学生空闲时间多参加一下比赛张伟的建议是大家在空闲时间多参加一些比赛。一个完整的项目,不管再小,只要做完了,就会有收获。多看一些比较大的开源项目源代码,每次看完后都会受益匪浅。从网上成熟的开源代码里,可以学到很多的设计思想。他认为,从项目入手,以项目为驱动,可激励自己进步。当然,是否一定需要看开源代码,这将取决于个人的兴趣和需要。画出程序流程图 理解程序流程思想CSDN博客专家i_like_cpp:曾在CSDN分享了《如何将源代码学好》的博文,对此,他给出了四点建议:1. 画出整个程序的流程图,理解整个程序流程的思想。画流程图的方式更让人很直接的理解程序的整体流程,而不会被代码所干扰,让程序员总体上把握整个程序;2. 对流程各节点(函数或过程)的理解,流程的每一节点是构成整个流程的不可缺少的部份;3.再把流程和流程各节点串起来理解整个程序,可能的话最好写出读书笔记;4. 如果想深刻的学习到源代码的精髓所在,请写一个相近的程序进行操练。理解了这个程序并不表明掌握了这个程序,只有在操练一个相近的程序时,才知道你到底理解了多少,掌握了多少。编后语:源代码的学习是一个从整体到不断细化的过程,是一个极为繁琐的过程同时也是一个不断认清事物本源的过程。本文总结的源代码的学习经验,希望对您有所帮助。那么,CSDN的网友们,你们是如何对待开源项目源代码的呢?
❺ 怎么阅读Spring源码
准备工作
1. 安装github:现在spring源代码都在github管理,所以首先需要下载githup,下;
2. 安装gradle构建工具: 下载完后进行解压到任意盘符,然后增加环境变量GRADLE_HOME,并在环境变量bin中增加%GRADLE_HOME%/bin,打开DOS窗口,运行gradle -v,出现版本号等信息,表示安装成功;
3. 下载Spring源码:首先打开git shell,切换到你的工作目录,然后输入以下命令:git clone git://github.com/SpringSource/Spring-framework.git,后面一串是源码下载地址。大概半小时的样子,就可以下载完成,这时候在你的工作目录中就会出现Spring-framework的目录,里面有Spring各组件的源码包;
4. 构建导入:下载下来的代码不能直接导入Eclipse,要先转换成Eclipse能读取的形式。因为所有组件都会依赖spring-core,所有我们首先要转换Spring-core工程,在命令窗口切换到Spring-core工程,运行gradle cleanidea eclipse命令,我们会看到开始下载工程所依赖的jar包,几分钟后执行完毕,再来看Spring-core文件夹,多了.classpath、.project等文件,这是Eclipse工程所必须的,然后可以把他导入到eclipse。因为大部分Spring组件都会用到 spring-beans、spring-context、spring-aop,而他们又依赖spring-expression、spring-instrument,所以我们干脆先把这些工程都进行转换并导入eclipse。
我初次导入过程并不顺利,拿spring-core为例,其中以来的一个jar包是Spring-framework/spring-core/build/libs/spring-asm-repack-4.0.jar,但我工程里面并没有他,只好在网上下载了一个,并加入构建路径,其次我还发现少commons-pool-1.5.3.jar、spring-cglib-repack-3.0.jar,都一一下载,最后还是报错没有java.util.concurrent.ForkJoinPool类,发现这个版本必须使用jdk1.7以上,1.6没有这个包。折腾半天,终于几个工程没变异错误了,向前迈进了一步。
❻ 如何正确的阅读源代码
除了阅读代码以外, 没有更好的方法. 7.在寻找bug时, 请从问题的表现形式到问题的根源来分析代码. 不要沿着不相关的路径(误入歧途). 8.我们要充分利用调试器|编译器给出的警告或输出的符号代码|系统调用跟踪器|数据库结构化查询语言的日志机制|包转储工具和Windows的消息侦查程序,
定出的bug的位置. 9.对于那些大型且组织良好的系统, 您只需要最低限度地了解它的全部功能, 就能够对它做出修改. 10.当向系统中增加新功能时, 首先的任务就是找到实现类似特性的代码, 将它作为待实现功能的模板. 11.从特性的功能描述到代码的实现, 可以按照字符串消息, 或使用关键词来搜索代码. 12.在移植代码或修改接口时, 您可以通过编译器直接定位出问题涉及的范围, 从而减少代码阅读的工作量. 13.进行重构时, 您从一个能够正常工作的系统开始做起, 希望确保结束时系统能够正常工作. 一套恰当的测试用例(test
case)可以帮助您满足此项约束. 14.阅读代码寻找重构机会时, 先从系统的构架开始, 然后逐步细化, 能够获得最大的效益. 15.代码的可重用性是一个很诱人, 但难以理解与分离, 可以试着寻找粒度更大一些的包, 甚至其他代码. 16.在复查软件系统时, 要注意, 系统是由很多部分组成的, 不仅仅只是执行语句. 还要注意分析以下内容:
文件和目录结构|生成和配置过程|用户界面和系统的文档. 18.可以将软件复查作为一个学习|讲授|援之以手和接受帮助的机会. ++++++++++++++++++++ 第二章: 基本编程元素 ++++++++++++++++++++ 19.第一次分析一个程序时, main是一个好的起始点. 20.层叠if-else if-…-else序列可以看作是由互斥选择项组成的选择结构. 21.有时, 要想了解程序在某一方面的功能, 运行它可能比阅读源代码更为恰当. 22.在分析重要的程序时, 最好首先识别出重要的组成部分. 23.了解局部的命名约定, 利用它们来猜测变量和函数的功能用途. 24.当基于猜测修改代码时, 您应该设计能够验证最初假设的过程. 这个过程可能包括用编译器进行检查|引入断言|或者执行适当的测试用例. 25.理解了代码的某一部分, 可能帮助你理解余下的代码. 26.解决困难的代码要从容易的部分入手. 27.要养成遇到库元素就去阅读相关文档的习惯; 这将会增强您阅读和编写代码的能力. 28.代码阅读有许多可选择的策略: 自底向上和自顶向下的分析|应用试探法和检查注释和外部文档, 应该依据问题的需要尝试所有这些方法. 29.for (i=0; i 30.涉及两项不等测试(其中一项包括相等条件)的比较表达式可以看作是区间成员测试. 31.我们经常可以将表达式应用在样本数据上, 借以了解它的含义. 32.使用De Morgan法则简化复杂的逻辑表达式. 33.在阅读逻辑乘表达式时, 问题可以认为正在分析的表达式以左的表达式均为true; 在阅读逻辑和表达式时, 类似地,
❼ c++源码如何阅读
看你的需求,如果你想知道他得用处,而不是具体的实现方法,那就着眼于对象,类,方法的作用上面,而不必看细致的东西,比如有几个类,分别干什么,他们有什么属性,方法,函数,只要看公开的,私有的不看,类之间的关系是什么,怎么互动的,就可以了,最好画一个类图 就更清楚了,
如果你要学习一下,看看怎么实现的,你先有个大概的东西,比如想知道怎么实现这个加密,你就去找那个类实现了,用那个方法实现的,
面向对象的方法设计模块间的耦合度比较低,问题一般比较独立
❽ 怎样去阅读一份PHP源代码
这个回答建立在已经能运行程序的情况下。在这个情况下,基本上PHP框架都会有一个入口文件。如果想要了解这个框架源码是怎么运行的,内核内核怎么跑的话,个人建议先从框架的一种最简单的domo开始入手,从入口文件开始,遇到哪里看不懂的情况下就在那个地方设定断点,或者哪个不懂的PHP原生函数就网络这个函数的使用方法,一直到这个小DOMO可以跑通。之前在看workmen 或者swoole 的时候差不多就是这样子去阅读的。不过还是建议你针对你自己的需求先去使用框架做功能,然后根据功能去慢慢看源码,这样子效率会高些。
❾ 怎样学习查看源代码
主要是你的学习方法不对,我本身英语差的要命,当年中考英语考21分,高考考27分,但是学这个却快的很,从开始学到基本熟练也才花了一个多月而已,而且是一边工作一边学而已我想你觉得难应该是太关注死记硬背这些样式名了,你把精力和事件都放在记代码上去了,就好比学英语记单词一样其实学习代码你不要去记这些代码的意思,你要从代码的功能方面去学习,首先你先把一些常用的样式代码主要了解一下,一些深入的特殊的代码可以往后再了解,因为只有你对这个有一定认识之后,你学习的速度效率才会更快
下面我就给你列举一下一些常用的样式并写出用法来
1、背景background:url(images/bg.jpg)00no-repeat#000;是4个关于背景的简写;如:背景图平:background-image、背景图片位移:background-position、背景平铺:background-repeat、背景颜色:background-color;2、高度height:100px、宽度width:100px;其中px是一个单位(像素),网页是以像素为单位的3、边框border:1pxsolid#000;是3个关于边框的简写;边框粗细:border-width:1px;边框样式(实线):border-style:solid;边框颜色:border-color:#000;4、字体:font:bold12pxArial,Helvetica,sans-serif;分解开的话就是:字体粗细font-weight:bold;字体大小font-size:12px;字体样式:font-family:Arial,Helvetica,sans-serif;字体行高line-height:20px;字体颜色color:#666;5、内边距padding:10px20px30px40px;分解开就是上内边距:padding-top:10px;右内边距:padding-right:20px;下内边距:padding-bottom:30px;左内边距:padding-left:40px;6、外边距margin:10px20px30px40px;分解开就是上外边距:padding-top:10px;右外边距:padding-right:20px;下外边距:padding-bottom:30px;左外边距:padding-left:40px;7、float:left;向左浮动以我这些年来的工作经验,上面列举的这些样式是比较常用的样式,我敢说只要了解上面这些样式代码的功能,做出一个页面来是不成问题的
当然,我这里列举的只是一些常用的,其他的样式等你熟悉了再自己学习一下你可以用Dreamweaver来写代码,因为这个软件有代码提示功能,只要打代码样式的头一个字体就会有相应的代码样式提示给你,只要你能够大概的了解代码的功能,也就没必要把代码全记住,做这行我都四五年了也不能完完全的写出多少代码的全称,因为我根本没有去记,我只要看到这个代码就知道这个是做什么用的就够了有一点要提醒下你,你最好是把Dreamweaver当做一个辅助输入工具,多锻炼一些手写代码,这样对自己学习很有帮助纯手打,希望对你有帮助
❿ 为什么以及如何阅读源码
对于这些问题,说到底主要是因为经验不够,而经验主要从项目实践中积累,所以招聘单位一般都会限定工作时间大于 3 年,因为这些人的项目经验相对较丰富,项目中遇到的场景相对较多。
工作经验的积累来自于年限与实践,然而看源码可以扩展我们的思路,这是变相增加我们经验的不错方法。虽然不能短时间内通过时间积累经验,但是可以通过学习开源框架、开源项目来获取。
另外进职场后一般都要先熟悉现有系统,如果有文档还好,没文档的话就得自己去翻代码研究。如果大家之前对阅读源码有经验,那么在研究新系统的代码逻辑时就不会那么费劲了。