有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ASM(来自ObjectWeb)未正确计算MaxStack,即使已设置ClassWriter(COMPUTE_MAX+COMPUTE_STACK)

在尝试加载我使用ASM生成的类时,我会遇到预期的ClassVerifyErrors。进一步检查后,我可以看到jvm是正确的,并且该方法所讨论的MAX_堆栈值无效。奇怪的是,我使用自动计算堆栈和最大局部选项,所以这应该不是一个问题。。。 带有invalid选项的方法非常简单,但结果却是糟糕的字节码

我已经用预期的方法编写了一个类,并将asm生成的类与javac生成的类进行了比较,字节码匹配的唯一错误是最大堆栈为0,这是错误的,而javac将值设置为2

我想避免自己计算最大堆栈/本地值


共 (1) 个答案

  1. # 1 楼答案

    如果字节码无效,最大堆栈和变量计算可能会产生错误的结果。您可以通过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);