Watch 命令的演示案例 | 学习笔记

简介: 快速学习 Watch 命令的演示案例

开发者学堂课程【线上问题排查利器 Alibaba Arthas(下)Watch 命令的演示案例】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/747/detail/13203


Watch 命令的演示案例


内容介绍:

一、演示案例

二、小结


一、案例演示

观察方法入参,对比前一个例子,返回值为空(事件点为方法执行前,因此获取不到返回值)

清除后只需在第一个例子的代码基础上修改一点加一个-b的参数,-b就是监控方法的入参,要在方法执行前监控,然后回车执行三次后结束。

image.png

此时可以发现入参有整数有负数,负数返回值为空,但正数也为空,因为是在方法执行前进行的监视,所以没有获得返回值。

观察当前对象中的属性,如果想查看方法运行前后,当前对象中的属性,可以使用 target 关键字,代表当前对象。

比方说想要看对象是什么样子的,还是以上面代码为例,我们只需要在方法前加一个target,然后回车就可以了。执行两次为例,可以发现target是代表了调用方法对象本身,这个方法对象本身result后面显示的是数学游戏类的对象里面的一些东西,里面主要显示了两个程序变量,第一个是random…看源码,在源码中我们可以看到,一个是random,一个是整数的illegal非法的参数,所以是观察当前对象中所有的属性。

image.png

回到现在程序我们可以看到,就两个属性,设置的级别为两级,所以可以看到random下一级的所有属性,同样也能看到它的值2233。

image.png

运行第二次,通过给的参数,我们可以获得这个对象当中的所有的属性,如果想要看其中的某一个属性,现将通过第四个例子讲解。

image.png

使用 target . field _ name 访问当前对象的某个属性

某个属性的写法就是点上这个属性名即可,只需要在target里面点上某个属性名,比如说看illegal ArgumentCount的属性名,将他的名字拷贝到target里面,因为只看这一个属性可以将-b的这些参数删掉,然后回车。

此时会发现显示的是illegal ArgumentCount这个属性,同样也是隔一秒钟调用一次,以上就是第四个例子。

image.png

同时观察方法调用前和方法返回后的结果,这里只调用两次,参数里﹣ n 2表示只执行两次。不指定次数的话会不断地在执行。

在前面方法的基础上改一下,要显示三个参数,显示方法调用前和方法调用后的参数值,

params 是参数, returnObj是返回值,加一个target代表当前对象,然后在这里面可以在指定其他的参数,-b是调用前,-x是显示的深度,-s表示方法调用后的一个监控点,再加一个-n2表示执行两次,按回车看一下执行结果:结果有三个,第一个是输入参数整数,第二个是代表对象的所有属性,第三个就是返回值,我们可以看到方法前的返回值是没有的,

image.png

方法后:

image.png

方法后第一个是参数,第二个是对象,第三哥代表的是返回值,返回值质因数分解出5,5,47,71.最后还有一个提示命令执行的次数最多两次,所以命令就此退出,可以通过-n的选项来查看。在Arthas当中,每个方法都可以用-h作为参数,这样就可以看到方法的用途,以及每个参数的解释,会发现每个参数的作用写的非常清楚,比如像s--success,就像上节课中猜测的一样(除了f--finish)

image.png

条件表达式的例子,输出第1参数小于0的情况。

通过条件表达式的方式,来进行过滤,输出第一个参数小于0的情况。大于0的不输出来,只输出小于0的情况。

回到最初,我们可以采用宿主,代表第0个参数就可以,因为我们确定了他只有一个参数,然后用target作为监视目标,依次是类名,方法名,还有ognl表达式,第四个参数指定‘params[0]<0’,注意params是复数,输好后回车。发现不是一秒一次了,原因是可能出现了大于0的情况但不会显示出来,所以不再是一秒钟一次,可能是几秒钟一次碰到一个小于0的。

正确代码如下:

[arthas @3670]$ watch demo . MathGame primeFactors "{ params [ 0], target }”" params [0]< 0 "

image.png

我们监视两个东西,第一个是入参,第二个是对象本身。我们没有指定它的深度,没有指定-x的参数所以深度默认值为1级,看不到里面的东西,而且所有的入参都是负数。说明我们的过滤条件起了作用。以上就是我们的全部例子。


二、小结:

参数、参数说明

image.png

[ b ]begin 监视方法执行前的情况

[ e ]exception 监视出现异常的情况

[ s ]success 执行成功的情况

[ f ]finish 执行完毕的情况,包含成功或失败

-x指定深度,-n指定执行次数…

相关文章
|
7月前
|
前端开发
【面试题】如何使用ES6 ... 让代码优雅一点?
【面试题】如何使用ES6 ... 让代码优雅一点?
Echarts实战案例代码(26):折线图组件连接空数据connectNulls的用法
Echarts实战案例代码(26):折线图组件连接空数据connectNulls的用法
505 0
|
7月前
|
Arthas 测试技术
Arthas调试案例:watch案例
Arthas调试案例:watch案例
|
BI 定位技术 Python
SWMM从入门到实践教程 04 快速入门案例的模拟执行
在左侧双击Options中的Dates,即可弹出时间的设置。此处为了教学,建议仅模拟6个小时,加快结果的生成。实际项目中,可以根据需求对指定场次的降雨时常进行模拟,并注意这个时常一定不低于降雨时常(我们的雨量计设置了2小时降雨,所有66个小时的模拟也是合理的)。
|
自然语言处理 前端开发 JavaScript
28个案例问题分析---014课程推送页面逻辑整理--vue
28个案例问题分析---014课程推送页面逻辑整理--vue
103 0
|
Python
[BlocklyNukkit入门]#4创建命令
Python可以吧function改为方法名 比如
71 0
|
前端开发
前端学习案例1-实战例子的介绍
前端学习案例1-实战例子的介绍
92 0
前端学习案例1-实战例子的介绍
|
前端开发
前端学习案例-ref的进阶用法1
前端学习案例-ref的进阶用法1
87 0
前端学习案例-ref的进阶用法1
|
Java 数据处理 数据库
StringMvc环境搭建以及小demo,例子
StringMvc环境搭建以及小demo,例子
137 1
StringMvc环境搭建以及小demo,例子
|
JavaScript 前端开发
前端知识案例-创建一个node.js应用程序
前端知识案例-创建一个node.js应用程序
64 0
前端知识案例-创建一个node.js应用程序