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

标签 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 等提供的那样?

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

最佳答案

我真的不认为这是可能的,使用 Javassist 你无法深入访问字节码。

您的需求太细粒度,并且库不支持它,正如您从 this 中看到的那样在文档中,您可以访问作为方法参数或方法返回的所有变量,但无法找到有关所有其他变量的任何信息。

如果我可以建议你应该看看ASM 。我不是这方面的专家,但据我所知,根据 this文档应该提供更深入的字节码 View 。

关于Javassist 捕获特定语句的局部变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42244726/

相关文章:

java - Android ActionBar 不显示在代码中设置的标题

java - 使用jsoup对Html字符进行编码

java - 我们可以使用Javassist向类添加导入语句吗

JavaSsist:toBytecode()抛出异常java.lang.RuntimeException:remaper.by.moofMonkey.Main类被卡住但他没有被卡住

java - "VerifyError: Expecting a stackmap frame"使用 Play 框架和 Google App Engine

java - SVG蝾螈 : how can I resize a single SvgIcon?

java - 用于将 java 对象序列化为固定宽度字节数组的库

java - 使用 Instrumentation 获取对象大小

c - 二进制检测或二进制代码中的图像和例程是什么?

Java javassist 方法调用