0

我将 ASM 与 java 代理一起使用。我有以下问题。每当我在方法调用中看到“PUFIELD”指令时,我想从我的代理库中调用一个方法。

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

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

4

1 回答 1

1

您可以尝试使用-bootclasspath/p而不是-jar,对于您的 util-class 或某些类加载器问题(例如,无法访问您的 jar 的不同(自定义)类加载器)而言,某些东西加载得太早了。如果你把你的 jar 放到 bootclasspath 中,至少这个缺陷源被消除了

于 2013-04-15T09:17:47.580 回答