成功解决Failed to execute ognl, exception message: ognl.OgnlException,Arthas怎么实时查看一个静态变量的值

在使用arthas定位问题的时候,如果我们想使用ognl命令查看一个静态变量的值,我们可能会使用这样的ognl命令:

ognl -x 3 '@com.fdw.study.MasterDataRelation@TYPE_DEPOSITARY'

但是这样使用可能会遇到如下报错,Failed to execute ognl, exception message: ognl.OgnlException: Could not get static...

这是为什么呢?

原来使用这个命令是有前提的,前提是使用的是默认的类加载器,当你使用了自定义的类加载器后,自定义类加载器会导致找不到类 

所以正确的方式应该是先使用sc -d命令找到该类的类加载器,然后再指定类加载器的前提下去使用ognl命令,如下:

 sc -d com.fdw.study.MasterDataRelation

但当我们执行了这个命令也常常找不到这个类,会报错

 这是因为在java中,一个普通类只有在被使用到的时候才会被加载到JVM,并且只有在被用到的时候才会执行它的静态方法!!!所以要想把他加载进去,能够搜索到它的类加载器,你需要先执行与它相关的业务操作,把它加载进JVM才行,比如说调用一下它相关的接口,这样做之后就可以找到了

成功解决Failed to execute ognl, exception message: ognl.OgnlException,Arthas怎么实时查看一个静态变量的值_第1张图片

根据拿到的hashCode,指定类加载器,然后执行ognl命令就可以了

ognl -c 20ad9418 -x 3 '@com.fdw.study.MasterDataRelation@TYPE_DEPOSITARY'

注意:使用getstatic命令也可以查看静态变量

getstatic -c 20ad9418 com.fdw.study.MasterDataRelation TYPE_DEPOSITARY

你可能感兴趣的:(java,开发语言)