java - 识别 `` 方法代码太大``起源

标签 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,它将所有 super 调用包装在try-catch block 中,并在异常捕获时报告正在处理的方法,但因为它是ClassWritertoByteArray 方法抛出错误,而用于遍历字节码的MethodVisitor 被创建为其中的局部变量,我还没有想到了解如何插入它。无法覆盖 toByteArray 方法,因为它似乎访问类私有(private)字段并且简单地复制失败,因为我也非常需要复制包的其余部分。

我还没有尝试检测 ClassWriter 本身,但在开始之前,我想知道是否有更合理的方法来找出哪个方法太大。

最佳答案

仅供引用,this commit添加一个包含此信息的新异常。 6.2.1 已经发布。

关于java - 识别 `` 方法代码太大``起源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48151987/

相关文章:

java - Cometd,Spring 安全 : Currently authenticated user not available inside a Listener

java - JAVA中不使用XMLParser部分解析XML文件

ruby-on-rails - 在屏幕上以相反的顺序打印 ruby​​ on Rails backstraces/stracktraces/errorss

java - 检测、通知和同步的含义

java - 在 list 中指定 -javaagent 选项

android - Android 上的参数化仪器测试

java - 裁剪图像会降低质量并且边框看起来很糟糕

java - 自动生成数据库请求

python - Wing IDE 不会在断点处停止

java - 测试数组类类型对象时出现 Eclipse ClassNotLoadedException