我正在使用ASM和java代理。我有以下问题。 每当我在方法调用中看到“PUTFIELD”指令时,我想从我的代理库调用一个方法。
if (opcode == PUTFIELD) {
super.visitMethodInsn(Opcodes.INVOKESTATIC, "instrumenter/Util", "debug", "()V");
Util
是我用静态debug
方法定义的类。它保留在我的agent.jar
java -javagent:agent.jar -jar test.Test
按预期工作。
然而,当我用其他一些jar文件测试这个代理时,我得到了以下错误。
Exception in thread "main" java.lang.NoClassDefFoundError: instrumenter/Util
我怀疑这是由于并发而发生的。由于创建此错误的程序大多是多线程的。
答案 0 :(得分:1)
您可以尝试使用-bootclasspath/p
而不是-jar
,可能是因为您的util-class或某些类加载器问题而加载的东西太早(例如,一个无法访问您的不同(自定义)类加载器罐)。如果你把你的jar放入bootclass路径,至少会消除这个缺陷来源