- 时间:2021-02-11 23:08 编辑:长友泰宪 来源:蚂蚁资源 阅读:223
- 扫一扫,手机访问
摘要:大家好,今天给大家介绍关于如何阅读源码(程序代码)的相关内容,详细讲解如何阅读源代码,如何高效得阅读大型项目源代码,如何阅读别人的代码?等,希望可以帮助到您。
如何阅读源代码,最近,我必须做源头阅读的东西,我觉得我的一些麻烦,我已经思考了。大型项目的源代码未读更详细的阅读。大项目,代码金额基本害怕。过度关注的细节,经常详细,并忽略整体框架。当您可以看到框架时,需要太多时间。因此,阅读一个大项目源代码,其目的是不欣赏代码细节,但在项目的整体框架的快速观点中:有这些模块,这些模块正在做(不关心如何做),模块通信机制可能是,然后考虑子模块,通常只要两级子模块就足够了。掌握这一点1或2天,它需要一直占据了这一点阅读大项目的源代码。因为一旦掌握了框架,您可以根据此框架实现此项目,但它与原始项目不同,但需求是相同的。在软件中,架构本质上。也许你期望阅读大项目源代码可以看到高质量的代码,但大型项目通常是团队的劳动力结果,而每个人的代码质量和低电平,单独在不同的时间。代码质量也不同。重要的是在散装源代码前面找到高质量,只是天堂。也许您必须从源代码中掌握技术细节,例如BSP或更改,那么最好的建议是找到相关的技术文档d文档中包含的示例代码。此示例代码通常不包括在内。任何干扰都是现有的,以证明这项技术。如果没有这样的事情,你只能从大项目的源代码中找出框架,你可以找到框架,你可以找到并找到表达技术的文件。但通常更为不幸,因为你通常会理解另一技术,以便理解这项技术。最后,谈谈如何阅读高质量源代码。什么是高质量的?是算法列表(例如某些O(1)的排序方法)?仍在采用极其深刻的语言功能来实现完美的表达(如灵活使用模板)?无论如何,最好的来源是一本书,如“STL详细”,或“内部XX“。本书的作者通常是这些高质量代码的作者,他将导致您探索这些来源背后的真相。
如何高效得阅读大型项目源代码,首先使用一些UML工具根据源代码生成UML,首先查看UML映射,对程序类的组成有一个粗略的印象,然后看看代码,这将更容易。
如何阅读别人的代码?,作为发起者,我们经常需要阅读他人的代码,以便从中学向其他人寻求设计思路,或者从代码中了解使用库。无论哪种要求,我们都需要快速准确地阅读。那么,你怎么读它?让我们拍摄.NET项目作为示例:当我们打开.NET解决方案时,通常有多个项目,例如三层Web项目,通常包括例如除网站之外。数据层(DAL),逻辑层(BLL)项目,此外,通常我们将提供一般目的项目(公共类库),或者在DAL中提取模型部分,这可以形成包含许多组件的解决方案。 。那么我们如何开始我们得到这个解决方案的时候?我的经历是我读了代码其他人和读数与面部和点相结合,脸部是最快的。所谓的面部和点,即首先了解劳动的分裂,如“网络”项目是一个网站部分,是VCC架构v;名称包括“BLL”的商业代码的名称,是MVC架构C;名称“DAL”的名称是数据库访问代码。它是MVC架构M ...了解每个子项目的功能,帮助我们直接输入主题,而无需花费太多时间来熟悉所谓的所谓帧部分。那么主题在哪里?对于Web项目,主题是页面和业务代码。而这些,我们需要学习一点和脸。所谓的点,即,让我们首先输入一个页面,例如index.aspx(如果不是这个页面,将有一个页面userlogin.aspx,打开此页面,找到功能按钮,根据该按钮找到下一页,在熟悉页面流程的过程中,我们还学习了呼叫方法来自事件代码的帧代码。那么读取特定页面(包括页面本身和按钮事件或商业代码)呢? 1,代码包括以下1)页本身,前码2)页面背景,即各种事件3)传递页面事件的其他代码(例如数据库访问代码,在多层中分隔的其他层架构)等待2,阅读订单1)读取前台,为初学者学习控制标签方法,当然,我们使用VS设计工具绘制页面,并查看代码只是to更熟悉或加深理解。 2)阅读页面背景事件代码,步行两个步骤。首先,宏理解事件函数,例如单击登录按钮,是要做:获取输入的用户名和密码,根据用户名和密码查找数据库,根据返回结果确定页面流,提示登录成功或失败信息,等等。只要了解函数,您无需了解每个代码的角色。因为这次我们首先要查看他人的背景码,对于一个很好的框架,我们很难在第一次阅读所有内容。 3)那么,在我们学习了一个事件之后,我们再次读取,此时分析该线。例如,我们将触摸数据表对象(例如用户对象),然后执行daTabase查询(此时我们可以熟悉项目中的数据库操作),然后操作返回值(例如,确定用户是否存在,不,密码正常。在这些操作中,我们可以(1)学习使用在基本类库中,(2)熟悉使用框架代码注意:在学习代码过程中,了解框架的进度是意识,学习代码是技术进步,所以逐渐理解代码阶段,遇到人们要打包井,如数据库访问类,不必太持久,只是理解,并遇到一些编程技巧,你需要了解深入的了解。
责任编辑(
长友泰宪)
以上就是关于**如何阅读源码,程序代码**的全部内容,了解更多请关注蚂蚁资源网。
- 123qwe
- 如何阅读Flask源码,去年做过一个不大不小的Flask项目,这边分享下我的做法:读Flask源码确实需要读Werkzeug的源码,Jinja2的源码则可以先晾在一边,原因是在框架结构上Flask与Werkzeug结合的更紧些,例如我们在一次HTTP请求上下文中使用的request实例,就是通过Werkzeug的LocalProxy包装实现的。而Jinja2则完全集中在模板渲染上,如果题主目前的主要任务是理清“HTTP请求响应流”在框架代码中的走向,那么Jinja2部分可以先作为黑匣子。怎么切入,我认为最好的方法是在您的View Handler中用ipdb下一个断点,然后启动程序并在浏览器中访问该页面,当运行到断点时,Python进程那边已经切换到ipdb的调试模式,您可以通过步进并随时查看当前代码所处的文件、对应行数,以及当前的堆栈帧。第一次用ipdb下断点查看时,不需要在意当前到达的每一步位置的上下文代码,只要记住我在哪个文件的哪个函数(方法)中,这样一遍走下来,您对一次HTTP请求会依次经历Flask框架中的哪些部分有个初步印象。接下去,就是打开这些“框架部分”对应的源码文件进行宏观阅读了,这是第二步,如果有经验,能够凭直觉一眼看出(或通过方法名、或通过代码的自文档化)此处是在做什么。如果第一步用ipdb调试是在脑海中对框架打轮廓,那么第二步做完后,已经对这个框架实现有较为清晰、整体的认识了。第三步,根据第二步所建立的认识,继续使用ipdb打断点并调试,但在这次,需要仔细地“打量”当前上下文,例如上面说的查看堆栈帧、或者通过locals()、globals()查看当前名字空间的变化,第三步的作用是为第二步所建立的概念模型进行实践验证,以加强理解如此反复二三两步,对框架主要部分实现的认识则会愈加清晰,把握住框架主脉络后,对于其他模块,例如signals、session,则可以逐个击破了。另外,Flask还会直接依赖itsdangerous这个库,我认为也可以了解下。我现在还在看Flask源码,原因是它的文档字符串写得很棒,可以作为我在其他项目使用sphinx-doc组件实践时很好的模板:)。
- 2021-02-11 23:08:48
- wydyaocg
- OpenStack 本身用 python 语言编写,虽然我一直觉得自己的 python 功底已经不错了,但在看源码的过程中,还总是觉得自己掌握的东西太少了,所以,首要的一点,如果你在看 OpenStack 源码,请一定要打牢你的 python 基础,不然有些技巧性的代码可能让你停滞不前。 看源码,如果能一气呵成最好。什么叫一气呵成呢?我先讲个每个人生活中都可能遇到的一些情况:你在做 A 事,但是突然 B 打电话,让你帮着解决 C 事,然后你就去做 C 事了,等你做完 C 事,发现家里有 D 事必须要做,然后你又去做 D 事……这样的结果就是,你把 A 事给遗忘了,即便你空闲时候想起来了,但是再去做的时候,发现没有第一次那样熟悉 A 事了,你需要重新花费一些时间来熟悉它。试想,如果一开始你就把 A 事做到底,会怎样? 看源码其实是一个很漫长的过程,特别对一个大型项目而言,如果你要看完它的源码,过程是很曲折的,这里的看完不仅仅是过目了一遍,脑子里还要能把逻辑关系理顺。你可能有疑问了,要看源码,一天两天解决不了,但是又要保证一气呵成,这根本就是无稽之谈嘛!事情也的确是这样,鱼与熊掌不可兼得!这里就有一个技巧的问题了,你不妨想象,这么大一个项目,它是怎么开发出来的?难道一开始,项目就已经策划好了?需要多少个源文件,每个文件里面的源码是什么也都做好了?有点经验的程序员都知道,这是不可能的。项目的开发是慢慢细化的,一开始只是核心,然后是骨架,然后有血肉,然后有做 A 事的工具……到这里,或许你知道我要说什么了,源码怎么一步步写出来的,我们就怎么一步步的去看它。先研究核心,再研究骨架,然后血肉,其它工具……。还有一个问题,就算我知道怎么看这些源码,我怎么去一气呵成?这就好比你要完成一件大事情,但是你发现给自己定这么宏大的目标对自己来说比登天还难,所以你就想到用小目标来不断激励自己,最终不断接近大目标。这里的一气呵成既然不能一气把所有源码呵成,那就分段吧!不要心急,不要总想着还有很多源码都还没看,保持淡定! 其实,看源码都是一样的,从架构处着手,然后慢慢扩展到细枝末叶。这里,说一些 utilities 。看源码是很枯燥的,一点都不形象不说,还要让脑子一直保持着源码中的很多东西,如果你想偷懒,如果你想让生活更简单,那就用图形吧,图形加速了整个 IT 的发展,它的强大与便利有目共睹。源码中的各个模块,类怎么耦合的,用了什么设计模式,拿张纸,画几笔,就显而易见了,当然,做个 PPT 更好。源码之间的互相交错是最让人头疼的,很多人一开始看源码,就从这个源文件的某个函数跳转到另一个源文件的某个函数,我想问一下,你以为你的大脑是电脑吗?你的大脑也可以像电脑那样按着调用顺序依次调用各个函数??如果你在看一个源文件,OK,先把这个源文件一气呵成再说,不要跳转到其它源文件,如果引用的其它源文件中的函数你不知道是干嘛的,先 pass ,以后再说,只要你知道调用它的函数是干嘛的就行,等你以后研究到另外一个源文件的时候,这个关系就很明确了。还有一个现象,很多人一接触一个项目的源码,看见那么多源文件,一下子就懵了,不知道如何下手,别人说,从 main 开始看,于是,他就从 main 开始看了,其实这个无所谓,还是那句话,不要以为你的大脑是电脑,做一些人脑力所能及的事,随便找个源文件,然后用心去看它,不要觉得这里的随便就是随便,虽然它的确是随便,但是如果你不知道我说的随便是哪个随便,那就只有随便你了。不管哪个项目,源码包中大致结构一看,基本上就知道各个东西大致是干嘛的,开发这些东西的也是人脑,不是电脑,为了方便理解,基本上文件取名都还是见名知意的。看源码是一件很有挑战的事情,对源码而言,记住,你永远都要站在它的对面,而不是将自己深埋进源码中,一旦你钻进去了,你就已经迷失了自己。还有很多……(稍后补充) 上面说了那么多,都没有谈到 OpenStack ,其实这个是相辅相成的,上面的你知道了,看 OpenStack 你也应该没有问题了,OpenStack 的核心项目是 nova, glance, swift ,最核心的就是 nova 了,所以,从 nova 开始看吧。nova 源码包中有很多子包,源文件。除了版权版本以及和其它组件交互的东西,随便找一个开始看吧。切记,在开始看之前,最好能把你知道的 nova 架构图烂熟于心。 这个很重要,因为你之后随时有可能沉迷进源码大军中。 好了,文章到这里,基本上就结束了。貌似没有给冲着 OpenStack 源码来的读者一个很好的建议,其实,任何事都没有一蹴而就的方法,想做成它,最好的方法就是,保持淡定的心态,一步步,走下去!作为过来人,还是给个建议,从 虚拟化开始看,因为这个里面用到了适配器设计模式,你稍微看一点就知道了这个包是干嘛的了,而且,可以提升你继续看源码的信心。转载
- 2021-02-11 23:08:48
- 亚亚
- 对于程序员来说,写代码永远比读代码来的舒服。但现实情况是,程序员常常需要阅读其他人员写的代码,更多的时候这些代码可能即没文档也没注释。不过,好象有个人说过一句话,代码之前,了无秘密。运用适当的策略可以让阅读工作变的轻松很多。1. 对于常用的系统函数进行追踪。比如ReadFile,CreateDevice,CreateWindow,在这些函数处放几断点,可以看到代码的调用过程。通过这种方式可以方便地把代码分为底层代码和上层逻辑代码。2.依据项目依赖关系进行阅读。项目的依赖关系同时表明了项目的复杂程度。对于大型的项目通常都会分割成若干子项目,根据项目的依赖关系,循序渐进的方式可以让阅读变的简单。3.对于以lib形式提供的子项目。在阅读时,可以先把lib的整个项目做为黑盒使用。根据_declspec(dllexport)或者以头文件方式提供的调用接口,可以减少对于细节的阅读时间。根据模块进行大致的划分,可以有效地对项目的结构有直接的感性认识。4.识别项目中使用的设计模式。对于大型项目来说,设计模式是必不可少的。在庞大的代码中识别设计模式,寻找代码中使用相似手法的代码结构可以极大简化需要阅读的代码。5.根据数据流程分析。动态职责划分。6.修改部分代码,进行调试。修改部分常数或者饶过某些程序执行流程,或者以简化的数据对程序进行追踪。
- 2021-02-23 17:25:02