使用Arthas实现在线更新代码

当本地代码调试无误但线上出现问题时,Arthas提供了一种便捷的在线代码更新方法。通过jad反编译、sc命令获取ClassLoader Hash、mc命令替换代码及redefine命令更新代码,可以避免繁琐的发布流程。不过要注意,redefine后不应立即使用jad检查,因为两者可能存在冲突。使用Idea的Arthas插件可简化操作。

前提

很多时候本地调试没啥问题,发到线上就出现问题,本地修改了代码要发布到线上比较费时。
那有没有什么方式直接更新上线代码? 有了Arthas,一切皆有可能。

安装Arthas就不在这里赘述了,官方链接写的很清楚也很简单官方地址

上代码

# 反编译代码  把 下面的xxxxx 换成你自己的类,  ">" 后面是你指定的路径
jad --source-only com.xxx.xxxx.Abc.java > /tmp/Abc.java

# 获取xxxx的ClassLoader的Hash值
sc -d com.xxx.xxxx.Abc.java | grep classLoaderHash


# 将上面得到的Hash值 换了“3d818f88” 这个
mc -c 3d818f88 /tmp/Abc.java -d /tmp

# 更新代码 xxx 对应你包的路径
redefine /tmp/xxx/xxx/xxx/Abc.class 

切记,redefine后不要用jad查看是否成功。

官方解释:redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置


后记

上面的代码我也记不住,主要用了Idea 的Arthas的插件,需要的自行下载吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值