启动 debug远程模式
打开源码的math-game模块并启动jar
本地启动math-game模块
启动arthas即可进入断点
arthas-agent 调试源码讲解步骤
-
解析参数获取agent-core的路径
-
根据路径创建自定义的类加载器
-
开启一个单独的线程去bind,通过反射调用ArthasBootstrap.getInstance方法
按照上面三个步骤逐步分析:
主要代码逻辑都在AgentBootstrap 中,开始分析的地方:
decode 以后的arthas
/Users/jlgl/.arthas/lib/4.0.1/arthas/arthas-core.jar;
;
arthasAgent=/Users/jlgl/.arthas/lib/4.0.1/arthas/arthas-agent.jar;
arthasCore=/Users/jlgl/.arthas/lib/4.0.1/arthas/arthas-core.jar;
javaPid=46335;
1. 解析参数获取agent-core的路径:
/Users/jlgl/.arthas/lib/4.0.1/arthas/arthas-core.jar
2. 根据路径创建自定义的类加载器
arthasClassLoader = new ArthasClassloader(new URL[]{arthasCoreJarFile.toURI().toURL()});
3. 开启一个单独的线程去bind,通过反射调用ArthasBootstrap.getInstance方法
Thread bindingThread = new Thread() {
@Override
public void run() {
try {
bind(inst, agentLoader, agentArgs);
} catch (Throwable throwable) {
throwable.printStackTrace(ps);
}
}
};
bindingThread.setName("arthas-binding-thread");
bindingThread.start();
bindingThread.join();
拓展
URLClassLoader 的用法
arthasCoreJarFile.toURI().toURL()
file:/Users/jlgl/.arthas/lib/4.0.1/arthas/arthas-core.jar