Arthas watch命令使用

目录

属性遍历深度

1、watch 类全限定名 方法名:遍历深度为1的入参、对象、返回信息

2、watch 类全限定名 方法名 -x n:观察遍历深度为n的入参、对象、返回信息

观察事件点

1、watch 类全限定名 方法名 params -x 2 -b:在方法调用前观察入参

2、watch 类全限定名 方法名 returnObj -x 2 -s:在方法返回后观察返回值

3、watch 类全限定名 方法名 '{params,throwExp}' -e -x 2:观察异常信息

条件表达式过滤

1、watch 类全限定名 方法名 params[0] "params[0]<0"

2、watch 类全限定名 方法名 params 'params.length==1'

3、watch 类全限定名 方法名 "{params,returnObj}" "params[0].equals('XXX')"


格式:watch 类全限定名 方法名 观察表达式 条件表达式

可以观察到的信息:方法入参、方法返回值、抛出的异常信息、调用方法的对象

观察表达式:默认{params, target, returnObj}

观察事件点

-b 方法调用前(观察入参时,方法中可能会有修改入参的操作)

-s 方法返回后

-e 方法抛出异常后

jad demo.MathGame查看源代码

Arthas watch命令使用_第1张图片

属性遍历深度

1、watch 类全限定名 方法名:遍历深度为1的入参、对象、返回信息

watch demo.MathGame primeFactors

x 默认为1,等价于 watch demo.MathGame primeFactors -x 1

Arthas watch命令使用_第2张图片

2、watch 类全限定名 方法名 -x n:观察遍历深度为n的入参、对象、返回信息

Arthas watch命令使用_第3张图片

观察事件点

1、watch 类全限定名 方法名 params -x 2 -b:在方法调用前观察入参

观察表达式:单个值可以不加"{}",多个值需要加"{a,b,c}"。

Arthas watch命令使用_第4张图片

因为观察事件点为-b方法调用前,所以返回值或异常均不存在

Arthas watch命令使用_第5张图片

2、watch 类全限定名 方法名 returnObj -x 2 -s:在方法返回后观察返回值

 Arthas watch命令使用_第6张图片

3、watch 类全限定名 方法名 '{params,throwExp}' -e -x 2:观察异常信息

-e 方法抛出异常时才会有触发输出

Arthas watch命令使用_第7张图片

条件表达式过滤

1、watch 类全限定名 方法名 params[0] "params[0]<0"

过滤出入参<0时的入参

2、watch 类全限定名 方法名 params 'params.length==1'

过滤出入参长度=1时的入参

Arthas watch命令使用_第8张图片

3、watch 类全限定名 方法名 "{params,returnObj}" "params[0].equals('XXX')"

过滤出字符串参数的请求

eg:获取用户信息方法

观察用户名为“张三”的请求:watch com.zm.MyTest getUser "{params,returnObj}" "params[0].equals('张三')" -x 2

观察用户ID为9的请求:watch com.zm.MyTest getUser "{params,returnObj}" "params[1]==9" -x 2

private User getUser(String name, Integer id){};

你可能感兴趣的:(Java,watch命令)