学习arthas(九)动态执行一些代码
Arthasadmin 发布于:2023-09-30 18:10:59
阅读:loading
所谓的执行一些代码主要是手工调用已有的一些被加载类的方法,并不是像JavaScript中的eval函数那么自由(本站深度研究过Apache Commons JCI项目可以动态的编译一些Java源代码为class,并加载它们来执行),本次主要使用arthas来执行一些已有的代码,这些代码并不一定是完整可调用的存在于某个方法,可能是需要多行自定义的方法,或者是单独新编写的,用于做一些补偿性的事情,比如某些原因导致的定时任务没有正常的执行,需要手工触发;再比如调用一些方法获取一些连接池的参数等等。
前面有使用`getstatic`和`ognl`分别做过一些实践,本次针对它们再次实践,属实是值得拥有。
(1)通过 getstatic 命令可以方便的查看类的静态属性。使用方法为`getstatic class_name field_name`,推荐直接使用ognl命令,更加灵活。
(2)如果该静态属性是一个复杂对象,还可以支持在该属性上通过 ognl 表示进行遍历,过滤,访问对象的内部属性等操作。
(3)获取的静态属性不限制访问修饰符,对于private私有的也可以正常访问。
(4)花了几分钟测试了一下,让GetStatic继承了一下Thread类,但是无法拿到父类中的静态字段,提示字段不存在。
/**
* 演示获取静态字段
*
* @author chendd
* @date 2023/9/25 13:16
*/
public class GetStatic {
private static String USER_NAME = "chendongdong";
private static final String WEBSITE = "https://www.chendd.cn";
private static Point point = new Point(9 , 11);
public static void main(String[] args) throws IOException {
System.in.read();
}
}
(1)调用无参非静态方法;
(2)调用带参数的非静态方法;
(3)定义多个变量表达式,输出多个变量;
(4)实例化一个类,并调用类的方法,再对方法返回值二次处理;
(5)调用一个静态方法;
(6)一次编写多个表达式,包含对象参数的传递;
(1)查看Spring Bean Application类的字节码
(2)查看Spring Bean 容器中连接池中的connectCount 和 closeCount属性的值
(3)调用Spring Bean 容器中组件的方法
(4)调用一个Controller方法,传递对象类型的参数,包含枚举类型、实例化对象、属性赋值等
点赞
发表评论
评论列表
留言区
- 开篇学习arthas啦
- 学习arthas(一)安装与入门介绍
- 学习arthas(二)Web Console控制台
- 学习arthas(三)命令大全与简单命令
- 学习arthas(四)系统命令
- 学习arthas(五)类命令
- 学习arthas(六)增强命令
- 学习arthas(七)arthas-tunnel-server的摸索
- 学习arthas(八)查找某个被加载的类
- 学习arthas(十)方法执行结果监控
- 学习arthas(十一)输出方法调用栈
- 学习arthas(十二)跟踪方法代码的执行
- 学习arthas(十三)监视代码的执行结果
- 学习arthas(十四)方法执行时的时空隧道
- 学习arthas(十五)无侵入的热部署
- 学习arthas(十六)热点功能火焰图