![](/img/trans.png)
[英]ByteBuddy: how to add local variable across enter/exit when transforming a method
[英]ByteBuddy - how to add local variable
我需要將局部變量添加到所攔截方法的生成主體中。
我已經嘗試過(為了生成一個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修改局部變量表?
您必須為局部變量數組指定正確的大小。 如果需要額外的插槽,則必須為附加器指定正確的尺寸:
new ByteCodeAppender.Size(
size.getMaximalSize(),
methodDescription.getStackSize() + 1
);
在上面的示例中,似乎您只為插值方法的值保留位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.