Java源码跟踪阅读技巧
转:https://www.jianshu.com/p/ab865109070c
本文基于Eclipse IDE
1、Quick Type Hierarchy 快速查看类继承体系。
快捷键:Ctrl + T
查看类很多人可能都知道,可源码阅读的时候更多用来查看方法体系更重要,可以方便快速的定位到方法的实现类。如:
此时如果想查看getBean()方法如何实现,可能会让你失望。结果如下:
进入到了BeanFactory的接口定义方法,什么也没有。
此时我们直接在getBean上 Ctrl+T
:
可以看到其实现的子类,点击子类进去即可。此方法还适用于框架中非常常见的模板方法模式,在抽象类中定义的模板方法,用这招轻松找到实现类。
当然还有详细的Open Type Hierarchy
会在左侧视图里面展示更好的Type View:
2、Open Call Hierachy 打开调用层级
快捷键:Ctrl+Alt+H
个人认为这是阅读源码最有用的利器,掌握它,可以轻松游走于各种方法调用之间。然而从我身边的朋友来看, 很多人都不知道他的存在。
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,就离弄懂他不远了。
Dubug的时候还应该注意debug视图的线程栈:
这个视图能够让你在走得比较深的时候,可以一眼看出自己怎么进来的,当前位于什么方法里等信息,还可以点击对应的代码行数进入查看。
总结,这是我使用IDE跟踪源码的几个小技巧,尤其是第二点,是很实用的,希望对大家在进行源码跟踪时有一定帮助。
作者:徐志毅
链接:https://www.jianshu.com/p/ab865109070c
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
最新文章
- CSharpGL(11)用C#直接编写GLSL程序
- 【BZOJ 3754】Tree之最小方差树
- Microsoft Visual C++ Compiler for Python
- 手动处理datanode磁盘间使用不均的问题
- 解决ArcGIS安装之后出现的Windows installer configures问题
- jq实现全选、全不选、反选
- Linux 网络编程详解三(p2p点对点聊天)
- 第十一篇:SOUI系统资源管理
- 【转】C# 委托的介绍(delegate、Action、Func、predicate)
- java之URL类
- std::map的操作:插入、修改、删除和遍历
- 获取Ip 的地域等信息接口-实例
- poj1797 - Heavy Transportation(最大边,最短路变形spfa)
- Jenkins学习之——(1)Jenkins的安装与配置
- PHP限制网页只能在微信内置浏览器中查看并显示
- Python多线程同步命令行模拟进度显示
- Django学习笔记(一)
- js笔记-DOM基础
- delphi 调用QQ邮箱发送邮件
- 阻塞队列 BlockingQueue 详解
热门文章
- jqGrid根据数据动态设置rowList
- SqlServer关于“无法删除数据库 ";XXXX";,因为该数据库当前正在使用”问题的解决方案
- Spring Boot 2.0 教程 | 快速集成整合消息中间件 Kafka
- pickle 序列化对象
- P2766 最长不下降子序列问题 网络流
- 牛客暑假多校第六场 I Team Rocket
- lightoj 1061 - N Queen Again(状压dp)
- 使用Nginx、Nginx Plus防止服务器DDoS攻击
- JavaScript漫谈之理解类型操作符typeof
- docker 搭建小型的node开发环境。