使用javassist获取局部变量?

时间:2014-11-29 20:30:41

标签: java instrumentation javassist

有没有办法使用javassist获取局部变量的名称?我的最终目标是在运行时获取Objects哈希码。例如,如果我有一个代码片段,如:

void try(){
Integer a = 123;
System.out.println(a);
}

我想对它进行检测,使其看起来像:

void try(){
Integer a = 123;
System.out.println(a.hashCode());
System.out.println(a);
}

所以,我正在尝试获取本地变量名称' a'然后在代码中检测回来。有没有得到这个名字,还有,有没有更好的方法做同样的事情?

感谢。

1 个答案:

答案 0 :(得分:0)

局部变量的名称a仅是元信息。在运行时,此信息取决于索引。对于非静态方法,局部变量将存储在包含引用的数组中:

------------
|  0   | 1 |
------------
| this | a |
------------

通过执行a指令来执行访问ALOAD_1。你需要做的是解析这样一条指令的字节代码并重复它,调用哈希码方法然后打印它。