很多时候新手看源码都会被绕晕, 本人也踩过这个坑,经过摸索 总结出来一些实用的看源码过程中的debug技巧。

首先,重点是带着问题去看,不然无处下手,都不知道入口是哪

举例:
我想看spring容器getBean时候的过程。是如何getbean的,如果有切面,又是如何实现的。

那么带着这个问题
在这里插入图片描述
我就需要去看
applicationContext.getBean("userService");
这行代码。

新手往往直接就点进去了,
在这里插入图片描述
然而再点进去之后是一个接口
在这里插入图片描述
这个时候就开始懵逼了
这个接口有n个实现,到底是走哪个??? 具体怎么走?
在这里插入图片描述

这个时候,第二个问题,不熟的源码,一定要开启debug模式,断点去看,因为框架里面的接口和抽象类往往有多个实现类,不到真正运行的时候,新手是看不出来是用的哪个实现类的。 使用step into可以进入方法内部, 最最注意的 在接口处打断点,debug的时候可以直接跳到该接口的实现类

例子:
打上断点debug
在这里插入图片描述

点进去getBean方法

在这里插入图片描述
此时点单步调试,先进来这段代码
在这里插入图片描述
进来之后
在这里插入图片描述
此时如果直接点getbean ,进行去是一个接口,那么可以在接口处打上断点,这样可以直接跳到该接口的实现类
在这里插入图片描述

然后点
在这里插入图片描述

就能进入到getBean实现类的方法
在这里插入图片描述

因此可以选择单步一步步看下去,也可以在接口处打上断点 直接跳到实现类。

注意:该方法也可能会被spring启动过程的其他类调用,因此加上断点之后,可能进入断点的时候不是自己的代码执行流程,因此,要么就是在启动之后,到了getBean那一步去加上断点,要么就是在断点上加上条件 过滤掉不是自己条件的调用

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐