java - 插桩导致常量池损坏

标签 java instrumentation

我有一个方法 A.passLong(Long),它接收 long 作为参数。我检测类 B,并添加该方法的调用,并传递一个长常量。

当我调试调用的方法 A.passLong(Long) 时,我发现该方法接收到的数字不是我作为参数传递的数字。

我使用“javap -verbose”来反编译带有检测代码的类的转储,看起来从常量池中读取的数字(我用调试器看到的数字)是预期数字和常量池中的以下数字。

这不是 JIT 问题,因为在调试和禁用 JIT 时它会重现。

有什么想法吗?

最佳答案

这看起来像 known issue在Sun Java1.5_04中。此后,他们添加了一些代码来在重新定义类时保护类中的反射(和常量池)。请参阅release notes 。我知道 Sun 的 1.5_12 运行良好。

那么您使用的是哪个 JVM?

关于java - 插桩导致常量池损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15320676/

相关文章:

java - 为什么这个 AES 实现会解包并再次包装 key ?

python Elasticsearch : how do you enable curl logging?

java - 为什么 ASM 不调用我的 `` VisitCode``?

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

interop - 是否可以对互操作程序集进行代码覆盖率分析?

java - 单击第二个 Activity 的按钮在 View 上执行 'single click' 或 'scroll to' 时出错

java - 运行 Runtime.getRuntime().exec 时出现问题

java - 在intellij中找不到符号(路径)

java - 通过 JVM TI 代理将 invokestatic 添加到 java/lang/Object.<init> 会导致 JVM 因段错误而崩溃

java - 为什么我在 AWS Cloud9 中运行的 java spring 项目在运行一段时间后关闭?