ASM(从对象式)计算不正确地MaxStack即使ClassWriter(COMPUTE_MAX + COMPUTE_STACK)被设定

StackOverflow https://stackoverflow.com/questions/2235493

我试图加载我已经使用ASM生成一个类时得到预期ClassVerifyErrors。在进一步的检查,我可以看到的是,JVM是正确的,方法是在谈论具有无效MAX_STACK值。奇怪的是现在用的是自动计算堆栈和最大的本地选项,因此这不应该是一个问题... 与无效的选项的方法是很简单的,但其结果是糟糕的字节码。

我已经写了一类具有预期的方法和比较我的ASM生成针对什么的javac产生和字节代码与唯一的误差为最大堆对决是0,这是错误的,而javac的设置值2类。

Id喜欢避免不必计算THA最大堆叠/当地人自己。

有帮助吗?

解决方案

最高堆栈和变量计算可产生错误的结果,如果字节码是无效的。您可以验证通过运行生成的代码线槽 CheckClassAdapter

例如,

  ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
  // generate code into cw instance...

  PrintWriter pw = new PrintWriter(System.out);
  CheckClassAdapter.verify(new ClassReader(cw.toByteArray()), true, pw);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top