Arthas使用Idea调试

时间:2021-7-21 作者:qvyue

系列

  • Arthas入门篇
  • Arthas功能介绍
  • Arthas 启动过程分析
  • Arthas使用Idea调试
  • Arthas Command处理流程
  • Arthas类查找和反编译原理
  • Arthas内存动态编译原理
  • Arthas动态重新加载类
  • Arthas导出加载类

开篇

  • 这篇文章主要主要参考了Arthas issue整理的针对Arthas核心模块arthas-core和arthas-agent的调试方法,针对源码阅读来说只要掌握调试方法,基本上代码就没有任何秘密可言了。
  • Arthas的调试基本上都得靠远程调试,所以启动参数需要携带-agentlib:jdwp参数来实现远程调试。
  • Arthas的版本arthas-all-3.5.0版本。

启动流程图

Arthas使用Idea调试
  • arthas-boot和as.sh作为启动的入口负责启动arthas-core。
  • arthas-core负责绑定arthas-agent到指定的jvm。
  • arthas-agent通过arthas-spy实现字节码绑定。

arthas-core调试

Arthas使用Idea调试
  • 步骤一:启动arthas-demo的MathGame服务。

lebron374$ jps
  2872 Launcher
  2873 MathGame
  • 步骤二:通过jps命令查看MathGame的进程id号。

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
  • 步骤三:通过java -jar命令启动arthas-core,启动命令里面的路径根据自己环境确定。可以通过com.taobao.arthas.boot.ProcessUtils#startArthasCore打断点获取参数。
Arthas使用Idea调试
  • 步骤四:通过IDEA的remote绑定远程调试的端口。
Arthas使用Idea调试
  • 步骤五:在com.taobao.arthas.core.Arthas#main打断点,执行步骤四的服务的debug功能。

arthas-agent调试

Arthas使用Idea调试
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 
  • 步骤一:启动arthas-demo的MathGame服务,启动参数里面添加如上内容。
Arthas使用Idea调试
  • 步骤二:IDEA添加远程调试指定步骤一的监听端口,开启远程调试功能。
Arthas使用Idea调试
  • 步骤三:在com.taobao.arthas.agent334.AgentBootstrap#agentmain进行断点。

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
  • 步骤四:启动arthas-boot的main函数,选择jps结果中的demo.MathGame方法。
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。