0

Java エージェントで ASM を使用しています。次の問題があります。メソッド呼び出し内に「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

これは並行性が原因で発生すると思われます。このエラーを作成するプログラムはほとんどマルチスレッドであるためです。

4

1 に答える 1

1

-bootclasspath/pの代わりに使用しようとすることができます-jar。おそらく、util-class またはクラスローダーの問題に対して何かがロードされるのが早すぎます (たとえば、jar にアクセスできない別の (カスタム) クラスローダー)。jar を bootclasspath に入れると、少なくともこの欠陥の原因は解消されます

于 2013-04-15T09:17:47.580 に答える