Javassist捕获特定语句的局部变量值

时间:2017-02-15 08:58:24

标签: java instrumentation javassist

我试图捕获分支和循环语句的条件表达式中涉及的变量值,例如:

if (a + b < c - 5) { // here, capture value of a, b and c
    // if body
}

for (int i = 0; i / x < 4 ; i++){ // here, capture value of i and x on exit of loop
    // for body
}

Javassist是否为if,switch,for和while语句提供ExpressionEditor,就像它对FieldAccess,MethodCall,Handler等一样。

还有其他方法可以解决这个问题吗? (我有兴趣在运行时这样做)

1 个答案:

答案 0 :(得分:1)

我真的不认为这是可能的,使用Javassist你不能去深入ByteCode。

您的需求太精细,并且库不支持它,因为您可以从this文档中看到,您可以访问所有变量,这些变量是方法的参数或返回方法但是您找不到任何内容关于所有其他变量。

如果我可以提出建议,你应该看看ASM。我不是专家,但据我所知,并且根据this文档应该提供更多洞察字节码的视图。