文章目录
- 二、命令列表
- 2.1 jvm相关命令
- 2.1.12 ognl(执行ognl表达式)
- 举例1:获取静态属性
- 举例2:调用静态方法
二、命令列表
2.1 jvm相关命令
2.1.12 ognl(执行ognl表达式)
使用场景
:Arthas 的 OGNL(Object-Graph Navigation Library)表达式功能是一个强大的特性,主要用于动态地访问和操作 Java 对象。这一功能在调试和分析 Java 应用程序时尤其有用。OGNL 表达式使得你可以在运行时检索、修改对象的属性,甚至调用对象的方法,所有这些都无需修改源代码或重新启动应用程序。
参数说明:
参数名称 | 参数说明 |
---|---|
express | 执行的表达式 |
[c:] | 执行表达式的 ClassLoader 的 hashcode,默认值是 SystemClassLoader |
[classLoaderClass:] | 指定执行表达式的 ClassLoader 的 class name |
[x] | 结果对象的展开层次,默认值 1 |
使用参考:
-
OGNL 特殊用法请参考
:https://github.com/alibaba/arthas/issues/71 -
OGNL 表达式官方指南
:https://commons.apache.org/dormant/commons-ognl/language-guide.html
测试代码:
public class OgnlDemo01 {
public static String s1 = "s1-public-static-v";
private static String s2 = "s2-private-static-v";
public static OgnlDemo01 ognlDemo01 = new OgnlDemo01();
public static void printS12() {
System.out.println( s1 + "----" + s2);
}
public static String getS12() {
return s1 + "----" + s2;
}
public static String setS12(String s1, String s2) {
OgnlDemo01.s1 = s1;
OgnlDemo01.s2 = s2;
return s1 + "----" + s2;
}
}
举例1:获取静态属性
基础语法
:ognl ‘@全路径类目@静态属性名’
[arthas@1176]$ ognl '@com.kerwin.arthas.demo.OgnlDemo01@s1'
@String[s1-public-static-v]
举例2:调用静态方法
基础语法
:ognl ‘@全路径类目@静态方法名(“参数”)’
[arthas@1176]$ ognl '@com.kerwin.arthas.demo.OgnlDemo01@getS12()'
@String[s1-public-static-v----s2-private-static-v]