基础命令
命令 | 含义 |
---|
help | 查看命令帮助信息 |
cls | 清空当前屏幕区域 |
session | 查看当前会话的信息 |
reset | 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 |
version | 输出当前目标 Java 进程所加载的 Arthas 版本号 |
history | 打印命令历史 |
quit | 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 |
stop | 和shutdown命令一致 |
shutdown | 关闭 Arthas 服务端,所有 Arthas 客户端全部退出 |
keymap | Arthas快捷键列表及自定义快捷键 |
options | 查看或设置Arthas全局开关 |
Class相关
SC 查看JVM已加载的类信息
参数名称 | 参数说明 | Demo |
---|
<class-pattern> | 类名表达式匹配 | sc demo.* |
-x, --expand <value> | 展开层次 | |
-E, --regex | 开启正则表达式 | sc -E org\\.apache\\.commons\\.lang\\.StringUtils |
-d, --details | 显示详细信息 | |
-f, --field | 输出当前类的成员变量信息(需要配合参数-d一起使用) | sc -d -f demo.MathGame |
sm:搜索出所有已经加载了 Class 信息
作用:“Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。
参数名称 | 参数说明 | Demo |
---|
<class-pattern> | 类名表达式匹配 | sm java.lang.String |
-E, --regex | 开启正则表达式 | sm -Ed org\\.apache\\.commons\\.lang\.StringUtils .* |
-d, --details | 显示详细信息 | sm -d java.lang.String toString |
jad:反编译指定已加载类的源码
功能 | 示例 |
---|
反编绎时只显示源代码 | jad --source-only demo.MathGame |
反编译指定类 | jad java.lang.String |
反编译指定的函数 | jad demo.MathGame main |
反编译时指定ClassLoader | jad org.apache.log4j.Logger
jad org.apache.log4j.Logger -c 69dcaba4 |
redefine:加载外部的.class文件,redefine jvm已加载的类
参数名称 | 参数说明 | Demo |
---|
-c | ClassLoader 的hashcodere | define -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class |
-p | 外部的.class文件的完整路径,支持多个 | redefine /tmp/Test.class |
组合用法
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
mc /tmp/UserController.java -d /tmp
redefine /tmp/com/example/demo/arthas/user/UserController.class
限制
- 不允许新增加field/method
- 正在跑的函数,没有退出不能生效,比如下面新增加的
System.out.println
,只有run()函数里的会生效
classloader:查看classloader的继承树,urls,类加载信息
参数名称 | 参数说明 | Demo |
---|
-a, --all | 列出所有ClassLoader 加载的类,请谨慎使用 | |
-c, --classloader <value> | ClassLoader 的hashcode ,查看URLClassLoader 实际的urls | classloader -c 3d4eac69 |
-h, --help | this help | |
-i, --include-reflection-classloader | | |
-l, --list-classloader | 按类加载实例进行统计 | classloader -l |
--load <value> | 用ClassLoader 去加载指定的类,配合-c | classloader -c 3d4eac69 --load demo.MathGame |
-r, --resource <value> | 用ClassLoader 去查找resource 配合-c | classloader -c 3d4eac69 -r META-INF/MANIFEST.MF
classloader -c 1b6d3586 -r java/lang/String.class |
-t, --tree | 打印所有ClassLoader 的继承树 | classloader -t |
JVM相关
字节码增强