2013-04-15 50 views
0

我正在使用帶有Java代理的ASM。我有以下問題。 每當我在方法調用中看到「PUTFIELD」指令時,我都想從代理庫中調用一個方法。帶外部庫的Java字節碼檢測儀器

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

typo?或者你真的認爲'instur/Util'? – wrm

+0

@wrm錯字。固定。 – janiss

回答

1

你可以嘗試使用-bootclasspath/p而不是-jar,可能是你的util-class或classloader問題(例如不能訪問你的jar的一個不同的(自定義)類加載器)加載得太早。如果你把你的jar放入bootclasspath,至少這個缺陷源被消除了