arthas如何通过ognl获取类的变量并修改
时间: 2024-09-07 07:06:02 浏览: 115
Arthas是一个Java诊断工具,它提供了一系列命令行操作来帮助开发者诊断生产环境中的Java应用问题。通过Arthas的ognl(Object-Graph Navigation Language)表达式,可以访问和修改Java对象的字段。
使用Arthas通过ognl获取类的变量并修改,可以遵循以下步骤:
1. 首先,使用Arthas的`jad`命令来反编译指定的类,获取类的结构和字段信息。这样可以知道要访问或修改的变量的确切名称。
```
jad <完整类名>
```
2. 然后,使用`get`命令,通过ognl表达式获取类的变量值。例如,要获取某个对象的`name`属性,可以这样操作:
```
get <完整类名> @<对象实例变量> <字段名>
```
3. 如果需要修改变量的值,可以使用`set`命令。这需要提供目标对象的实例引用、字段名和新的值。例如,将`name`属性修改为`newName`:
```
set <完整类名> @<对象实例变量> <字段名> <新值>
```
4. 在使用`set`命令之前,确保你了解修改变量可能带来的影响,因为它会直接改变应用的运行状态。务必谨慎操作,并确保有相应的回滚计划或备份。
请注意,能够访问和修改的字段受限于Java语言和JVM的安全策略。某些私有或受保护的字段可能因为安全策略而无法修改。
相关问题
arthas 3.6.9版本 ognl 指令访问方法和变量。 类:com.cecjx.web.controller.business.LicRequestUiController 类的方法:public TableDataInfo selectLicRequestRemarksList(@RequestParam("reqNo") String reqNo, ModelMap mmap) 类的变量:@Value("${seal.uuid}") private String sealUuid;
你好!针对你的问题,arthas 3.6.9 版本中 OGNL 指令访问方法和变量的语法如下:
1. 访问方法:#{class.method(args)}
其中,class 是要访问方法的类名,method 是要访问的方法名,args 是方法的参数。对于你提供的类和方法,可以使用以下命令访问:
```
ognl #{com.cecjx.web.controller.business.LicRequestUiController.selectLicRequestRemarksList('reqNoValue', new org.springframework.ui.ModelMap())}
```
其中,'reqNoValue' 是 reqNo 参数的值,new org.springframework.ui.ModelMap() 是 mmap 参数的值。
2. 访问变量:${expression}
其中,expression 是要访问的变量名或表达式。对于你提供的变量,可以使用以下命令访问:
```
ognl ${seal.uuid}
```
其中,seal.uuid 是要访问的变量名。
希望能够解决你的问题!
arthas 查看变量变化
arthas 是一个 Java 诊断利器,可以通过以下命令查看变量变化:
1. 首先使用 `jps` 命令找到目标进程的进程号(PID)。
2. 然后使用 `arthas` 命令连接到目标进程:`./as.sh --pid <PID>`。
3. 进入 `ognl` 模式,可以通过 `ognl` 表达式获取变量值,例如:`ognl "@com.example.demo.DemoController@name"` 可以获取 `DemoController` 类中的 `name` 变量值。
4. 使用 `watch` 命令可以监控变量的变化,例如:`watch com.example.demo.DemoController name` 可以监控 `DemoController` 类中的 `name` 变量变化。
需要注意的是,`arthas` 需要在目标机器上安装,而且需要目标进程的 PID。另外,`arthas` 也可以通过 `jad` 命令反编译目标类,但是需要保证目标类没有被加密或混淆。
阅读全文