首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteBuddy -如何添加局部变量

ByteBuddy -如何添加局部变量
EN

Stack Overflow用户
提问于 2018-03-08 17:33:42
回答 1查看 422关注 0票数 2

我需要将局部变量添加到被截获方法的生成体中。

我尝试过(为了生成一个int变量):

代码语言:javascript
复制
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修改局部变量表呢?

EN

回答 1

Stack Overflow用户

发布于 2018-03-10 11:42:59

必须为局部变量数组指定正确的大小。如果您需要一个额外的插槽,您必须为该附录指明正确的大小:

代码语言:javascript
复制
new ByteCodeAppender.Size(
  size.getMaximalSize(), 
  methodDescription.getStackSize() + 1
);

在上面的示例中,您似乎只为检测方法的值保留位置。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49179137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档