zl程序教程

您现在的位置是:首页 >  其他

当前栏目

使用Arthas实现热更新代码

2023-03-15 23:26:39 时间

在定位问题或快速验证问题的时候,如果还需要编码、推送到仓库、在编译发布,整个流程会比较长,我们可以使用Arthas完成热修改代码,实时看到最新效果

启动arthas

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

反编译&修改类

  • 找到对应的类全名: sc命令
# arthas命令: 找到对应的全量类名
sc *.UserController
# sc: Search-Class
# 输出com.example.demo.arthas.user.UserController
  • 反编译类:jad
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
# jad 命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码
  • 修改类文件
vim /tmp/UserController.java

热编译&热加载

  • 查找类加载器
sc -d *UserController | grep classLoaderHash
#输出:classLoaderHash   1be6f5c3
  • 热编译
$ mc -c 1be6f5c3 /tmp/UserController.java -d /tmp
#mc: Memory Compiler/内存编译器
  • 加载新类

使用redefine命令重新加载新编译好的UserController.class:

redefine /tmp/com/example/demo/arthas/user/UserController.class

参考