系列
- Arthas入門(mén)篇
- Arthas功能介紹
- Arthas 啟動(dòng)過(guò)程分析
- Arthas使用Idea調(diào)試
- Arthas Command處理流程
- Arthas類(lèi)查找和反編譯原理
- Arthas內(nèi)存動(dòng)態(tài)編譯原理
- Arthas動(dòng)態(tài)重新加載類(lèi)
- Arthas導(dǎo)出加載類(lèi)
開(kāi)篇
- 這篇文章主要主要參考了Arthas issue整理的針對(duì)Arthas核心模塊arthas-core和arthas-agent的調(diào)試方法,針對(duì)源碼閱讀來(lái)說(shuō)只要掌握調(diào)試方法竟纳,基本上代碼就沒(méi)有任何秘密可言了。
- Arthas的調(diào)試基本上都得靠遠(yuǎn)程調(diào)試,所以啟動(dòng)參數(shù)需要攜帶-agentlib:jdwp參數(shù)來(lái)實(shí)現(xiàn)遠(yuǎn)程調(diào)試扔仓。
- Arthas的版本arthas-all-3.5.0版本絮重。
啟動(dòng)流程圖
- arthas-boot和as.sh作為啟動(dòng)的入口負(fù)責(zé)啟動(dòng)arthas-core陶冷。
- arthas-core負(fù)責(zé)綁定arthas-agent到指定的jvm。
- arthas-agent通過(guò)arthas-spy實(shí)現(xiàn)字節(jié)碼綁定宦焦。
arthas-core調(diào)試
- 步驟一:?jiǎn)?dòng)arthas-demo的MathGame服務(wù)。
lebron374$ jps
2872 Launcher
2873 MathGame
- 步驟二:通過(guò)jps命令查看MathGame的進(jìn)程id號(hào)顿涣。
java
-agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=y
-Djava.awt.headless=true
-Xbootclasspath/a:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/../lib/tools.jar
-jar /Users/lebron374/.arthas/lib/3.5.0/arthas/arthas-core.jar
-pid 2599
-core /Users/lebron374/.arthas/lib/3.5.0/arthas/arthas-core.jar
-agent /Users/lebron374/.arthas/lib/3.5.0/arthas/arthas-agent.jar
- 步驟三:通過(guò)java -jar命令啟動(dòng)arthas-core波闹,啟動(dòng)命令里面的路徑根據(jù)自己環(huán)境確定√伪可以通過(guò)com.taobao.arthas.boot.ProcessUtils#startArthasCore打斷點(diǎn)獲取參數(shù)精堕。
- 步驟四:通過(guò)IDEA的remote綁定遠(yuǎn)程調(diào)試的端口。
- 步驟五:在com.taobao.arthas.core.Arthas#main打斷點(diǎn)蒲障,執(zhí)行步驟四的服務(wù)的debug功能歹篓。
arthas-agent調(diào)試
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000
- 步驟一:?jiǎn)?dòng)arthas-demo的MathGame服務(wù),啟動(dòng)參數(shù)里面添加如上內(nèi)容揉阎。
- 步驟二:IDEA添加遠(yuǎn)程調(diào)試指定步驟一的監(jiān)聽(tīng)端口庄撮,開(kāi)啟遠(yuǎn)程調(diào)試功能。
- 步驟三:在com.taobao.arthas.agent334.AgentBootstrap#agentmain進(jìn)行斷點(diǎn)余黎。
lebron374$ jps
2872 Launcher
2873 MathGame
[INFO] Found existing java process, please choose one
* [1]: 4068 org.jetbrains.jps.cmdline.Launcher
[2]: 4020 demo.MathGame
[3]: 358
3
[INFO] arthas home: /Users/lebron374/.arthas/lib/3.5.0/arthas
[INFO] Try to attach process 4191
[INFO] Attach process 4191 success.
[INFO] arthas-client connect 127.0.0.1 3658
- 步驟四:?jiǎn)?dòng)arthas-boot的main函數(shù)重窟,選擇jps結(jié)果中的demo.MathGame方法。