【Arthas】命令之ognl使用姿势

简介: 【Arthas】命令之ognl使用姿势

文章目录

Althas中的OGNL使用姿势

参数说明

使用示例

1.调用静态属性

2.调用静态方法

3.读取不同类型的值

Ognl 常用用法说明

`#`变量引用 `#this` 当前对象

调用构造方法

收集特殊使用姿势

参考资料

还不了解Arthas怎么安装启动的可以翻阅 【Arthas】初始Arthas,安装使用

本文所有的执行命令,可以把项目 Althas(阿尔萨斯)学习 拉到本地启动之后,都可以直接执行


image.png

image.png

Althas中的OGNL使用姿势

从3.0.5版本增加

Althas支持ognl的格式


参数说明

参数名称 参数说明

express 执行的表达式

[c:] 执行表达式的 ClassLoader 的 hashcode,默认值是SystemClassLoader

[x] 结果对象的展开层次,默认值1 (如果对象里面包好对象,这个值大一点可以一起输出)

使用示例

1.调用静态属性

ognl '@全路径类目@静态属性名'


示例:

ognl '@com.shirc.arthasexample.ognl.OgnlTest@static_str'

image.png

2.调用静态方法

ognl '@全路径类目@静态方法名("参数")'

示例一: 简单入参 返回普通对象

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18)' -X 1

image.png

示例二:简单入参 返回对象中包含对象和List

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18,2)' -x 1

image.png

-x 1 中的x是小写; 上面可以看到 child对象和childs列表都没有打印出来

试试 -x 2-x 3

image.png

-x 2 的时候对象属性有展开,但是列表没有, -x 3 才把列表展开了


示例三: 方法A的返回值当做方法B的入参


ognl '#value1=@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18), #value2=@com.shirc.arthasexample.ognl.OgnlTest@setPerson(#value1) ,{#value1,#value2}' -x 2

image.png

示例四:执行多行表达式,赋值给临时变量,返回一个List:

$ ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'
@ArrayList[
    @String[/opt/java/8.0.181-zulu/jre],
    @String[OpenJDK Runtime Environment],
]

示例五: 方法入参是简单类型列表

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getChilds({"jinjidelaomanong","jjdlmn"})' -x 2

image.png

示例六: 方法入参是一个复杂对象


先用构造函数构造一个对象

ognl 'new com.shirc.arthasexample.ognl.Shirc("jjdlmn",true)'

然后把这个对象当做入参传入;所以最终可以这么写

ognl '#obj=new com.shirc.arthasexample.ognl.Shirc("jjdlmn",true),@com.shirc.arthasexample.ognl.OgnlTest@inputObj(#obj)' -x 2


image.png

示例七: 方法入参是一个Map对象


先构造一个Map对象可以这样

ognl '#{ "foo" : "foo value", "bar" : "bar value" }'

然后把这个对象赋值给一个变量; 最后把这个变量当做入参传入;

然后把这个对象当做入参传入;所以最终可以这么写


ognl '#inputmap=#{ "foo" : "foo value", "bar" : "bar value" }, @com.shirc.arthasexample.ognl.OgnlTest@getMap(#inputmap)' -x 2

image.png

3.读取不同类型的值

读取 复杂对象、List、Map等等值的方式

示例一:访问复杂对象属性

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18).name' -x 4

image.png

示例二、访问List或者数组类型

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getChilds({"jinjidelaomanong","jjdlmn"})[0]' -x 2

image.png

示例三: 访问Map对象


ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"]' -x 2


ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"].sex' -x 2

shirc: 是map的key; 记得要用双引号"" 引起来

image.png

Ognl 常用用法说明

#变量引用 #this 当前对象

OGNL的变量方案很简单, 你可以用变量来保存中间结果, 并在后面的代码中再次访问它, 也可以用变量来使整个表达式更加简单易懂. OGNL中的所有变量, 对整个表达式都是全局可见的. 引用变量的方法是在变量名之前加上 # 号

OGNL在计算表达式的过程中, 随时会将当前对象保存在 "this"变量中, 这个变量也可以象其他任何变量一样引用,用 #this 表示当前对象


例如:

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"].(#this.sex=="boy"?"BoyNB":"GirlNB")' -x 2

image.png

调用构造方法

new 全路径类名()

ognl 'new com.shirc.arthasexample.ognl.Shirc("shirc",true)'

image.png



image.png

相关文章
|
Arthas 监控 Java
Arthas常用命令
Arthas常用命令
256 0
|
5月前
|
Arthas 监控 Java
揭秘Arthas:如何轻松查看入参的命令
【Arthas教程】了解阿里开源的Java诊断工具Arthas,用于实时监控和诊断应用。使用`watch`命令查看方法入参和返回值,如`watch 类全名 方法名 "{params, returnObj}" -x 展开层数`。优势在于实时性、易用性、灵活性和高效性。提升使用效果需熟悉基本及高级命令,并多实践。尝试Arthas,提升Java开发效率!我是木头左,一起学习进步!
揭秘Arthas:如何轻松查看入参的命令
|
Arthas Java 测试技术
Arthas中plaintext、pwd、quit-stop、reset基础命令应用
通过本教程的操作,您可以体验如何Alibaba Cloud Linux  2.1903 LTS 64位操作系统的云服务器上学习plaintext、pwd、quit-stop、reset基础命令教程用法。
|
Arthas JSON Java
Arthas中help、history、keymap、options基础命令应用
通过本教程的操作,您可以体验如何Alibaba Cloud Linux  2.1903 LTS 64位操作系统的云服务器上学习Help、history、keymap、options基础命令教程用法。
|
Arthas Java 测试技术
Arthas中cat 、cls、echo、grep基础命令应用
通过本教程的操作,您可以体验如何Alibaba Cloud Linux  2.1903 LTS 64位操作系统的云服务器上学习cat 、cls、echo、grep基础命令教程用法。
|
Arthas 存储 Java
Arthas中session、tee、version、wc基础命令应用
通过本教程的操作,您可以体验如何Alibaba Cloud Linux  2.1903 LTS 64位操作系统的云服务器上学习session、tee、version、wc基础命令教程用法。
|
Arthas JavaScript Java
Java 诊断工具 Arthas 常见命令(超详细实战教程)(一)
Java 诊断工具 Arthas 常见命令(超详细实战教程)(一)
Java 诊断工具 Arthas 常见命令(超详细实战教程)(一)
|
Arthas Java 测试技术
Java 诊断工具 Arthas 常见命令(超详细实战教程)(二)
Java 诊断工具 Arthas 常见命令(超详细实战教程)(二)
Java 诊断工具 Arthas 常见命令(超详细实战教程)(二)
|
Arthas 监控 Java
Arthas(java 诊断工具):安装和常用命令
Arthas(java 诊断工具):安装和常用命令
449 0
Arthas(java 诊断工具):安装和常用命令
|
Arthas Java 测试技术
五分钟带你玩转Arthas(六)命令列表
五分钟带你玩转Arthas(六)命令列表
200 0