簡體   English   中英

ByteBuddy-如何添加局部變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM