IDEA 的断点使用和自带的热部署

IDEA 断点使用

IDEA 的两种断点

suspend 断点(阻塞的断点)

这个断点也就是平时最多用到的断点。鼠标左键单击代码行数即可添加断点,颜色为红色。
suspend断点
All 表示断点到此处后,阻塞所有的方法;Thread 表示仅阻塞当前线程,不影响其他方法的执行。

Condition 中可以输入表达式,当满足表达式内容的时候,才会进入断点。

Condition 的其他使用

因为 Condition 里面的方法会在断点的时候被调用,可以在这个方法里面编写某些逻辑并执行然后返回 false,从而达到不断点修改变量的目的。

比如图中可以输入

appId = "123456Test"; return false; 

即可直接将 appId 赋值为 123456Test 并且不被阻塞。

非 suspend 断点

Windows 下通过按住 Shift + 鼠标左键 进行断点插入,如图
非suspend断点
此时断点的颜色为橘黄色,并且有更多的配置项。

里面比较主要的就是 Evaluate and log 的配置项。这个是计算当前表达式的值并且在本地 IDEA 的 debug 窗口的控制台将表达式的值输出,相当于 System.out.println()
输出
勾选了 "Breakpoint" hit message 后会打印该行的行号,如图中的 Breakpoint reached at xxxxx。

勾选了 Evaluate and log 后则能打印蓝色字体的输出值,等。

这个可以用于 debug 时快速排查问题代码位置。例如在多处打上该断点,判断某处之后的断点没走到,同时结合打印的输出,可以较快地定位问题,并且对于其他人或者前端的影响较小,只会使得请求稍微变慢而不是阻塞。

IDEA 自带的热部署

热部署工具有 ArthasJRebel 等,Arthas 开源免费,JRebel 商业收费软件。

目前我自己这边项目中的痛点:某些 Controller 类无法用 Arthas 热部署。

IDEA 中,热部署的使用与 Arthas 类似,都是需要将整个工程构建然后才能进行热部署。在使用 Arthas 时,需要将要修改的 Java 文件编译为 class 然后使用 Arthas 命令登录到服务器热部署,而使用 IDEA自带的热部署的话,只需要连接到远程工程进行 debug,然后将工程进行构建,构建完成之后,IDEA 会对比两端的差异,弹窗提示是否重新加载文件,然后热部署对应的代码。
hot swap
reload class
使用 IDEA 的热部署,经过测试可以热部署的 Controller、Bean 等的代码,但是不能新增方法。
hot swap fail

建议热部署的步骤

先构建工程,然后启用 debug 连接到远端工程,然后修改需要热部署的 Java 文件的任意一处代码,比如添加空格等,此时就能把当前 Java 类进行热部署而不影响已有的类。

若先进行了 debug 的连接,再构建工程,可能本地代码和运行中的工程的代码不一致,或者是其他人也热部署了代码,会将远端的代码替换为本地的代码,从而导致其他人使用的时候出现问题。

其他

IDEA 的热部署原理暂未探明。

其他:JRebel 可以对类的方法进行新增,甚至能修改方法返回值等,能够非常有效提升调试效率,不过是商业收费软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值