识别``方法代码太大``来源

时间:2018-01-08 14:07:05

标签: java debugging instrumentation java-bytecode-asm bytecode-manipulation

所以我遇到了

MY: WARNING cannot transform class XYZ
java.lang.RuntimeException: Method code too large!
    at org.objectweb.asm.MethodWriter.a(Unknown Source)
    at org.objectweb.asm.ClassWriter.toByteArray(Unknown Source)
    at ...

我知道Method code too large! exception using ASMthe project it links to

但是,我已经提供了ASM的修改版本,因此,使用该项目并不是一个真正的选择。

这将要求我手动分解违规方法。值得庆幸的是,这恰好发生在一个库类(到目前为止--.-)所以它应该是可管理的。

我想检测并报告过大的方法。所以我可以更容易地确定我必须拆分。 (坦率地说,我不明白为什么默认情况下不会提供此错误的原因。)

已经编写了一个MethodVisitor,它包含try-catch块中的所有超级调用,并且异常捕获报告正在处理的方法,但因为它是ClassWriter抛出错误的toByteArray方法,用于遍历字节码的MethodVisitor被创建为其中的局部变量,我还没想出如何插入它。无法覆盖toByteArray方法,因为它似乎访问类私有字段而只是复制失败,因为我几乎也需要复制包的其余部分。

我还没有试过检测ClassWriter本身,但是在去那里之前,我想知道是否有更合理的方法来确定哪种方法太大了。

1 个答案:

答案 0 :(得分:1)

仅供参考,this commit添加了一个包含此信息的新异常。 6.2.1已与提交一起发布。