【发布时间】:2020-10-27 19:15:14
【问题描述】:
我刚刚尝试改变一个方法的行为:替换返回值:
ctMethod.insertBefore("return null;");
转换效果很好,我什至将clazz.toBytecode() 写入文件,IntelliJ IDEA 成功反编译了.class 文件,我可以在那里看到我的更改。
但是,有一个错误阻止了类的重新转换,它似乎是在我的转换器执行后抛出的,它在本机代码中,并且没有消息:
java.lang.VerifyError
at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:167)
at [place where I call retransformClasses]...
这是什么意思?我做错了什么?
如果我改为使用ctMethod.insertBefore("System.out.println(1);");,它就会开始工作。
javassist 的版本是3.26.0-GA。 3.27.0-GA 和 3.27.0-GA-bugfix-328 上也会发生同样的情况。
【问题讨论】:
标签: java bytecode instrumentation javassist javaagents