利用arthas热更新class文件
背景:发现一个bug,家里难以复现,需要在现场环境更新几行代码验证。
arthas-boot version: 3.7.1
java -jar arthas-boot.jar启动arthas
1、利用arthas的sc命令查找确定类名称
sc com.**
2、反编译为java文件
jad com.**.Test > /home/Test.java
3、将源码文件放置对应包路径,并修改源码,删除最前部和最后的反编译信息
4、编译代码
mc /home/test.java -d /home
对比代码:哪里报错改哪里, 会存在部分解析异常的。
5、动态加载代码
redefine /home/com/Test.class /home/com/Test$1.class
提示编译成功,触发代码查看日志。
改动部分需要加少量日志,以确认改动生效。
使用redeline 热更新代码后,在使用jad反编译时,拿到的依然是旧代码。此时,需要根据日志判断是否生效