本文基于Eclipse IDE,我们每天都使用的IDE其实提供了很多强大的功能,掌握它们,往往能够事半功倍。

1、Quick Type Hierarchy 快速查看类继承体系。

快捷键:Ctrl + T

查看类很多人可能都知道,可源码阅读的时候更多用来查看方法体系更重要,可以方便快速的定位到方法的实现类。如:

此时如果想查看getBean()方法如何实现,可能会让你失望。结果如下:

进入到了BeanFactory的接口定义方法,什么也没有。此时我们直接在getBean上 Ctrl+T :

可以看到其实现的子类,点击子类进去即可。此方法还适用于框架中非常常见的模板方法模式,在抽象类中定义的模板方法,用这招轻松找到实现类。

当然还有详细的Open Type Hierarchy

会在左侧视图里面展示更好的Type View:

2、Open Call Hierachy 打开层级调用

快捷键:Ctrl+Alt+H

个人认为这是阅读源码最有用的利器,掌握它,可以轻松游走于各种方法调用之间。然而从我身边的朋友来看, 很多人都不知道他的存在。推荐大家看这篇文章《10个Eclipse珍藏插件推荐》。

Open Call Hierachy 查看结果如下,调用关系清晰明朗,可以直接定位到调用的地方。

3、debug 断点的灵活使用

断点调式时,心中必须很清楚F5、F6、F7、F8的作用,不然要么迷失于源码之中,要么什么都没看清就走完了。

重新啰嗦一下它们的作用:

  • F5 Step Into,单步进入。进入到某个方法里面;

  • F6 Step Over,单步结束。一行一行的执行代码,入门时很多人只会一行一行走;

  • F7 Step Return,跳出放发。进入到某个方法里面时,如果发现这个方法没有你想看的东西,或者已经看到了你想看的,直接F7,跳出到方法外;

  • F8 Resume,继续往下执行。往下执行,遇到下一个断点时再停下来,没有则一直运行完。

调试时我们可能会经常遇到loadClass的情况:

在40行想进入ClassPathXmlApplicationContext构造方法,F5不料进入了类加载:

熟悉类加载的同学会很熟悉,不熟悉类加载机制的也不要慌,这是说明你调试的类第一次被加载,这时候我们F7跳出类加载,回到40行。

这个时候再按F5会真正进入ClassPathXmlApplicationContext构造方法。
当我们断点跟踪Spring这种源码的时候,一定要有节奏,以优先找到整体脉络为准,不要一直的F5进入每一行细看,F5下去,几天都走不完Spring。

能熟练在Spring这种框架中F5、F6、F7、F8,就离弄懂他不远了。

Debug的时候还应该注意debug视图的线程栈:

这个视图能够让你在走得比较深的时候,可以一眼看出自己怎么进来的,当前位于什么方法里等信息,还可以点击对应的代码行数进入查看。

总结,这是我使用IDE跟踪源码的几个小技巧,尤其是第二点,是很实用的,希望对大家在进行源码跟踪时有一定帮助。

[转载 java 技术栈] eclipse 阅读跟踪 Java 源码的几个小技巧!的更多相关文章

  1. Java技术栈思维导图

    Java技术栈思维导图 Java IO流体系 设计模式

  2. Java 技术栈中间件优雅停机方案设计与实现全景图

    欢迎关注公众号:bin的技术小屋,阅读公众号原文 本系列 Netty 源码解析文章基于 4.1.56.Final 版本 本文概要 在上篇文章 我为 Netty 贡献源码 | 且看 Netty 如何应对 ...

  3. "Oracle要对Java收费了,SAP基于Java技术栈的那些产品的客户怎么办"

    今年年初的时候,所谓"Oracle要对Java收费"的新闻,在网上传得沸沸扬扬.这个新闻被专业人士视为标题党,而国内众多技术论坛,比如知乎社区上,有很多大神对"Java收 ...

  4. java技术栈:项目概述

    学习使用java到现在也有三年多了,这三年基本是以项目驱动的方式学习,有好有坏,个人觉得好处在于,有一个清晰的目标让你解决,这会让你学习非常迅速有效.当然坏处就是片面,不成体系.这种学习方式在学校以小 ...

  5. 干货:Java技术栈18年02月精彩好文汇总

    一晃眼,一个月过去了,新年也过完了. 一晃眼,又老了一岁了,感觉新的一年压力更大了. 我们也该为这一个月的技术做做汇总了,错过的同学正好可以统一回顾看看,已经看过的同学也可以再温习一下.. Java技 ...

  6. java中的==、equals()、hashCode()源码分析(转载)

    在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. ==  java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: ...

  7. Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  8. 如何通过eclipse查看、阅读hadoop2.4源码

    问题导读:1.官网src包下载包,能否直接使用?2.如何跟踪和查看hadoop源码? 此篇是从零教你如何获取hadoop2.4源码并使用eclipse关联hadoop2.4源码基础上的一个继续,上文其 ...

  9. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

随机推荐

  1. git版本回退

    场景1: 当你改乱了工作区某个文件的内容,修改后未执行git add和git commit,想直接丢弃工作区的修改时,用命令git checkout -- file. 场景2: 当你不但改乱了工作区某 ...

  2. Vue接口异常时处理

    一般接口只会对后台返回的json状态进行判断处理,当后台异常时,我们可以使用catch来对这些异常进行同样的报错处理. 例如: 上面显示代码例子中test为一个接口,json为后台正常返回的数据对象, ...

  3. Luogu4491 [HAOI2018]染色 【容斥原理】【NTT】

    题目分析: 一开始以为是直接用指数型生成函数,后来发现复杂度不对,想了一下容斥的方法. 对于有$i$种颜色恰好出现$s$次的情况,利用容斥原理得到方案数为 $$\binom{m}{i}\frac{P_ ...

  4. 什么是GPIO?

    ”通用输入/输出口”(GPIO)是一个灵活的由软件控制的数字信号.他们可由多种芯片提供,且对于从事嵌入式和定制硬件的Linux开发者来说是比较熟 悉.每个GPIO都代表一个连接到特定引脚或球栅阵列(B ...

  5. 20165223《网络对抗技术》Exp5 MSF基础应用

    目录 -- MSF基础应用 实验说明 实验任务内容 基础问题回答 实验内容 主动攻击 ms17_10_eternalblue(成功) ms17_10_psexec(成功) ms08_067_netap ...

  6. 蓝书例题之UVa 10253 Series-Parallel Networks

    挺有趣的一道题 首先转化模型,思路参考蓝书,可得出等同于求共n个叶子,且每个非叶结点至少有两个子结点的无标号树的个数的二倍,设个数为\(f[n]\) 考虑怎么求\(f[n]\),假设有一个\(n\)的 ...

  7. 大二学生党的Security+备考宝典(一次过)

    刚出成绩的一刹那,我的心里是慌的很的,因为可能知识点复习的不够扎实,考试上的题目全都回归了课本,而我的知识回归了老师(滑稽),一下给大家分享下我的经验,希望大家引以为戒,都能考出好成绩. 一.直播阶段 ...

  8. 传入list或map进行首字母大小写转换

    /**     * 首字母小写     * author:wp     */    public static Object keyFirstToLower(Object obj) throws Ex ...

  9. 【Mac上的PotPlayer视频播放器】Movist Pro for Mac 2.1.2

    [简介] Movist 是Mac上最好用的视频播放器之一,功能齐全,类似Windows上的PotPlayer,今天和大家分享最新的 2.1.2 中文版本,Movist 支持几乎所有常见的视频格式,包括 ...

  10. 08--STL关联容器(set/multiset)

    一:set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. set采用红黑树变体的数据结构实 ...