我需要将局部变量添加到被截获方法的生成体中。
我尝试过(为了生成一个int变量):
List<StackManipulation> statements = new ArrayList();
statements.add(IntegerConstant.forValue(false));
statements.add(MethodVariableAccess.INTEGER.storeAt(3));
...
StackManipulation logic = new StackManipulation.Compound(statements.toArray(new StackManipulation[0]));
StackManipulation.Size size = new StackManipulation.Compound(logic).apply(methodVisitor, context);
return new ByteCodeAppender.Size(size.getMaximalSize(), methodDescription.getStackSize());但这给了我
java.lang.VerifyError:局部变量表溢出。
当然,局部变量表应该已经有了这个变量。
为了解决这个问题,我现在创建额外的方法参数作为局部变量,这当然不方便。
那么,如何使用ByteBuddy修改局部变量表呢?
发布于 2018-03-10 11:42:59
必须为局部变量数组指定正确的大小。如果您需要一个额外的插槽,您必须为该附录指明正确的大小:
new ByteCodeAppender.Size(
size.getMaximalSize(),
methodDescription.getStackSize() + 1
);在上面的示例中,您似乎只为检测方法的值保留位置。
https://stackoverflow.com/questions/49179137
复制相似问题