题
我需要为我的Java应用程序编写一个代理,该应用程序在每个数组创建中都会做一些特定的内容。到目前为止,我找不到在此事件上运行代码的任何方法。
- java.lang.instrument.classfiletrytransformer不会获得“数组类”,因此无法将其连接到“数组的构造函数”中。和“数组类永远是可修改的”
- 没有JVMTI事件对应于此
有什么建议么?
解决方案
您需要修改应用程序的字节代码才能做到这一点。我找到了 ObjectWeb ASM 成为工作的最佳工具。一般的想法是:
- 创建一个JVMTI代理,该代理拦截您感兴趣的类。
- 将您要仪器的课程传递给ASM类变压器。
- 在类变压器中,您可以拦截与构造数组相关的Java Opcodes,例如AneWarray(请参阅 JVM规格 更多)。
不隶属于 StackOverflow