前情提要
線上跑的代碼找不到源碼了,項目又需要調整某個字段的校驗規則,早有耳聞知道可以通過Arthas完成這個場景的需求,實際動手試了試,在此記錄一下。
警告!警告!
# !!! 重要警告 !!!
# 1. 生產環境謹慎使用,先測試
# 2. 修改前備份原始類
# 3. 確保修改符合JVM規範
# 4. 注意內存泄漏風險
# 5. 重啓後會丟失修改
# 安全操作流程:
# 1. jad導出源碼備份
# 2. 在小範圍測試修改
# 3. mc編譯時檢查錯誤
# 4. redefine後立即驗證
# 5. 記錄修改內容以便後續正式發佈
基本流程
1. 反編譯現有類 -> 2. 修改代碼 -> 3. 編譯成.class -> 4. 重新加載
啓動Arthas
進入到Arthas的bin目錄下執行 `./as.sh` 命令,選擇對應的Java服務。
反編譯現有類到指定文件
jad --source-only *** > /***/arthas-output/***.java
修改代碼
vi /***/arthas-output/***.java
編譯成.class文件
mc -c <ClassLoaderHash> /***/arthas-output/***.java -d /***
查看ClassLoaderHash的值
sc -d com.***
輸出的內容會顯示具體的ClassLoaderHash值
重新加載class文件
retransform /***/***.class