带有外部库的Java字节码检测

时间:2013-04-15 08:34:59

标签: java java-bytecode-asm

我正在使用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

我怀疑这是由于并发而发生的。由于创建此错误的程序大多是多线程的。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用-bootclasspath/p而不是-jar,可能是因为您的util-class或某些类加载器问题而加载的东西太早(例如,一个无法访问您的不同(自定义)类加载器罐)。如果你把你的jar放入bootclass路径,至少会消除这个缺陷来源