当前位置:  技术问答>linux和unix

如何读一个项目的源代码?

    来源: 互联网  发布时间:2016-04-15

    本文导语:  现在有很多开源的软件, 怎么读它们的源代码,他们的源代码是怎么组织的呢? | 以Linux内核源代码为例: 使用工具source insight 首先建立源代码工程,source insight会帮助你建立一个库 它能...

现在有很多开源的软件,
怎么读它们的源代码,他们的源代码是怎么组织的呢?

|
以Linux内核源代码为例:

使用工具source insight

首先建立源代码工程,source insight会帮助你建立一个库
它能够帮助我们在看一段源码的时候,跟踪函数、变量的定义、声明、调用等情况

能够识别多种文件,基本上常见的都能识别

看源码的顺序,个人以为:
1)看源代码的目录结构,大致了解各个目录下都有些什么,可能是什么,有的源代码中
有readme或者其他文档可以告诉我们源代码的目录结构

这时候有两种不同的顺序看源码了:
第一种:
大致看一下Makefile,如果对make很熟的话,就可以知道源代码是如何编译的,可以知道程序的入口是什么
这里可能需要掌握一些gcc编译工具相关的知识,可以在gnu.org上找到manual文档,随时翻阅

然后,从程序的入口开始看起,看程序初始化了一些什么,最后是否进入一个主程序,主循环

再然后,可以分模块看了,可以根据初始化流程中的初始化顺序看各个模块,也可以根据主程序中用到的关键
模块开始看

第二种,与上面正好相反
首先看各个模块的实现,大致了解之后,看这些模块是如何被串起来运行的

基本上在看源代码的过程中,上面的一些方法可能会重复、反复,
从粗略到细致,逐步细化的看比较好

如果一上来就陷到代码细节中,会感觉比较郁闷




|
还有一种,就是带着问题看源代码

你对源代码的哪个部分感兴趣,那就专门看那个部分

比如想看Linux中的slab算法,那么就专门看slab.c等相关文件
这时候,要先看关键数据结构,如kmem_cache_s,slab_t等
围绕数据结构看:
1)数据结构什么时候会被实例化
2)实例化的数据结构是什么时候,如何被初始化的,从而可以了解slab算法的初始化过程
3)哪些接口会对数据结构进行操作,并导致数据结构中的关键数据项(或者你所关心的数据项)发生变化
从而可以了解slab的分配和回收,或者其他你所关心的算法细节

4)如果其他模块想使用slab,那么应该如何使用,这就需要寻找一个使用的实例

在上述过程中,source insight的追踪功能将会被使用的比较多



|
刚开始我也被阅读代码的问题所困扰,在公司接受一个换了4个开发团队,没有任何文档的代码。我阅读的经验是:
1.首先将代码编译,多运行几遍目标程序,了解业务流程。
2.自己编辑一个数据字典,不求完全和系统一样,以后的阅读过程中再改进。
3.从main.cpp(类似的项目,通常有一个主文件)开始阅读,注意全局变量,因为很稀烂的班子开发的代码里,会有很多全局变量。
4.用简单流程图和E-R图把代码里比较复杂的逻辑记录下来。
这样你就天下无敌了。

|
主要看机构。把握住结构,然后,再分别按照模块来看就可以了

|
ls的方法是对的,工具推荐:sourceinsight

|
ls 的楼上的方法是对的,但ls推荐的工具就不敢苟同了。

|
不同的项目,组织各有不同吧

|
还是先读读项目的开发文档,再读源码

|
可以看看《代码阅读》这本书,介绍了一些相关的知识

|
I use "scource insight",and find it's good~

if 3rd floor has better tool,please recommend.

read from main() frist,then understand the utility of the functions.
The last,you can analyse the detail of every func.

|
source insight
这个比较好,点到相应的方法的时候,将会现实
该方面的实现。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Apache Hadoop 项目主页及介绍
  • 求教,一个"项目管理"的项目.有建议给分!
  • Django项目使用示例步骤及代码
  • 菜鸟问题:企业级是什么?什么样的项目才叫企业级?Java是如何实现企业级的项目的?
  • elasticsearch RESTful项目举例说明: java jest
  • 在linux下做项目,在项目开始时,分析好开发接口后,通常做一个只要几行代码的文件,以生成.O形式的文件,
  • 软件项目版本控制需要注意的几点
  • 调查:作十个一万元项目,还是作一个十万元项目。
  • protocol buffers详细介绍及项目主页地址
  • 项目管理程序 ProjectPier
  • 项目管理软件 Onepoint Project
  • 项目和任务管理系统 Scrumix
  • 静态项目排期表 plan.js
  • Web项目管理系统 Ganttic
  • 项目管理软件 Project'Or RIA
  • 任务/项目管理 todoyu
  • 在线项目管理系统 NetOffice
  • 项目管理系统 Collabtive
  • 项目管理平台 2-plan
  • 有没有免费的项目可做?
  • 如何加入到一个开源项目中?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3