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