变量的值"/>
成功解决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才行,比如说调用一下它相关的接口,这样做之后就可以找到了
根据拿到的hashCode,指定类加载器,然后执行ognl命令就可以了
ognl -c 20ad9418 -x 3 '@com.fdw.study.MasterDataRelation@TYPE_DEPOSITARY'
注意:使用getstatic命令也可以查看静态变量
getstatic -c 20ad9418 com.fdw.study.MasterDataRelation TYPE_DEPOSITARY
更多推荐
成功解决Failed to execute ognl, exception message: ognl.OgnlException,Arthas怎么实时查看一个
发布评论