• 怎么阅读源码【调试观察源码】



    ✿ 需要掌握的编译器知识

    ★ 编译器为eclipse为例子

    • 调试准备工作(步骤:Window -> Show View -》...):

      □ 打开调试断点Breakpoint:
      image

      □ 打开变量监视:
      image

    • 要看一个方法的内部细节,按f5,进入
      image

    • 放行操作,可以快速跳到下一个断点的位置【在目标位置上打个断点】,然后按f8
      image

    • 观察方法的细节(执行流程),一步一步走,按f6
      image

    • 去除掉所有断点(编译器是eclipse)
      image

      □ 注意看开始标记的执行位置对不对
      image

    • f5调试的方式进入【若进入的是不相干的,按f7返回,再按f5进入一次
      举例:

    User user = mapper.get(1L); //在这里打一个断点进入,会先进入Long类,因为执行顺序是(1L)先执行呀,所以先进入它之后,再执行get方法
    
    • 按ctr 和 按调试的f5的区别:
      □ ctr:是进入“被选中的代码(类、接口、方法)”的定义的位置【强调点是代码的定义
      □ f5:是对于当前代码按执行的先后顺序进行执行,进入、执行它的内部【强调点是代码的执行

    • 按ctr 结合鼠标, 可以知道代码下一步的去向(按ctr要注意的细节:ctr默认进入的是被选中的代码的定义,不是实现过程,进入之后发现没看到什么有帮助理解的代码,返回返回按住ctr,选择实现(若是有多个实现,不知道选哪个,可以通过调试f5进入),再按鼠标进入。
      image
      image

    • 重新开始调试细节:
      (1)关闭上一次调试
      (2)点击 开始调试之前,保留开始位置的断点前面的√,其他断点前面的√先去掉(开始调试之后才√回来)
      image

    • 进入一个方法后了解到方法的细节,想返回接着往下执行,按f7 返回 【返回按f7
      一般在深入了解某个模块之后,可以按返回,返回。。。然后接着了解下一个模块
      image




    ✿ 读源码的思路

    1、重点理解执行逻辑(执行过程可以按control进入方法或类,理解下一步去向后,光标回到当前位置【快捷键是alt+←】)

    2、看源码过程理清思路,异常相关的(error、exception、throw),让代码更加健硕的细节可以忽略;栈相关的stack,底层的可以忽略

    3、在代码中,看到选择分支的话,可以观察变量的值(判断条件)知道要进入哪个分支

    4、在代码中,看到不理解的代码,可以先往下执行,然后通过观察变量的值进行理解【还可结合官网进行理解】

    5、读取流、加载资源、绑定命名空间、参数转化不是重点

    6、构造构造器不是重点,重点是看 构造器的构造过程

    7、构造解析器不是重点,重点是看 解析器的解析过程

    8、创建了子类要注意:什么类型的子类?当子类有封装的父类或兄弟类时候,注意封装的父类或兄弟类是什么类型的?




    ✿ 读源码如何抓重点的思路(以mybatis的源码为例)

    ■ 1、 阅读源码的过程,应该阅读哪一个,哪一个是阅读重点呢?

    • 阅读源码构建会话工厂对象的源码,咱了解到:创建了一个SqlSessoinFactory会话工厂对象是通过默认的SqlSessoinFactory创建的,在创建的时候需要传入一个配置对象【即创建会话工厂对象的时候还创建了一个配置对象】,至此,研究一下配置对象的创建过程。
      image

    • 阅读源码构建会话工厂对象的源码,咱了解到:创建一个sqlSession会话对象是通过默认的sqlSession,在创建的时候需要传入三个参数,重点是观察哪个呢?

    □ configuration 配置对象(在阅读会话工厂对象构建的源码的时候咱就了解过它了,不是重点)
    □ executor 执行器(重点,因为在return 会话对象之前构建了executor执行器
    □ autoCommit (是否提交,布尔值,不是重点)
    image

    • 结合理解逻辑,还有return的提示作用,知道阅读重点是list的过程
      image





    ✿ 阅读源码需要掌握的单词

    • map 映射       mapper 映射器
    • factory 工厂
    • build 构建
    • config 配置
    • parse 解析     parser 解析器      parsed 已解析的      parseConfiguration 解析配置
    • interceptor 拦截器
    • plugin “安装[增强]”、插件
    • proxy 代理
    • prepared 预编译的 callable 存储的
    • statment 语句对象      preparedStatement 预编译语句对象     callableStatement 存储的语句对象
    • cursor 光标
    • instantiate 实例化      instantiateStatement 实例化语句对象
    • handler 处理器      typeHandler 类型处理器
    • row 行

  • 相关阅读:
    作业五:团队项目——项目启动及需求分析
    结对编程项目---四则运算
    PSP记录个人项目耗时情况
    代码复查
    是否需要有代码规范?
    编写一个能自动生成小学四则运算题目的程序。
    目前流行的源程序版本管理软件和项目管理软件的优缺点
    在Github注册账户
    浏览完整部教材,列出不懂的5-10个问题
    FZU 1683 纪念SlingShot(矩阵水)
  • 原文地址:https://www.cnblogs.com/shan333/p/15894831.html
Copyright © 2020-2023  润新知