2017-02-15 147 views
0

我试图捕捉到的涉及分支和循环语句的条件表达式变量的值,例如: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 
} 

不Javasssist成为如果交换机提供ExpressionEditor,为而像这样的语句对FieldAccess,MethodCall,Handler等呢?

有没有其他方法解决这个问题? (我有兴趣在运行时执行此操作)

+0

Javassist的 - 除了建议 - 允许您遍历所有代码指令。从与Javassist和ASM一起工作,我确实建议您查看更适合这些转换形式的ASM。 –

回答

1

我真的不认为这是可能的,对于Javassist,您无法访问并在ByteCode中深入访问。

您的需求太细化,库不支持,因为您可以从this文档中看到,您可以访问所有变量,这些变量是方法的参数或方法的返回值,但您无法找到所有其他变量。

如果我可能会建议你应该看看ASM。我不是这方面的专家,但据我所知,根据this文档应该提供对字节码的更多见解。