为 arthas 中实现look命令提供一些通用的支持
no1. commit: 9e62fbc7cd85da9684dc7753b0cc059b7dc591cb
事出有因
这边在尝试增强kotlin1.4编译出来的class时,在一些lambda表达式中会出现增强失败的情况,其中使用了LocalVarsBinding,经过公司大佬的排查,发现kotlin会写入一些不会使用到的变量到 LocalVariableTable ,并且 LocalVarsBinding 在读取 LocalVariableTable 时,不会判定该变量是否有使用,因此增强后的字节码会校验失败.
Retransform时候的报错信息:
Decompile时候的报错信息:
期望的解决方法
如题,期待是能提供一个 exclude-pattern 支持,目前编译器产生的变量一般都是带有$的,通过表达式排除包含$的变量,能一定程度上解决这个问题.
如何复现
代码: https://github.com/isadliliying/bytekit/tree/wingli-before-line-enhance-error 增强报错的单元测试: com.alibaba.bytekit.asm.location.LineBeforeLocationMatcherEnhanceTest#testLocalVarsEnhanceError 增强成功的单元测试: com.alibaba.bytekit.asm.location.LineBeforeLocationMatcherEnhanceTest#testLocalVarsEnhanceSuccess
no2. commit: 86f15a33437f17312933ca3dd48f93374ce0c58f
原因
希望使用注解传递一个String类型的参数,目前使用场景是在Arthas中进行监听时,使用传递该值作为监听的key
no3. commit: cfb2b9be6e4fb434513adca66eee22a872161a2e
为什么需要暴露是否被过滤掉的状态呢?
因为在使用行来进行增强(InterceptorProcessor#process)时发现如果没有明确出 匹配失败 和 被过滤 两种状态的话,在外层逻辑上没法做对应的处理(Arthas中无法判定是否需要注册listener)

