我正在使用JVMTI編寫應用程序。我正在嘗試使用字節碼:通過在每個方法條目上注入方法調用。解決JNI中的依賴關係DefineClass
我知道該怎麼做,但問題出在儀器類上,比如說它叫做Proxy
,我用JNI函數DefineClass加載。我的Proxy
在Java類庫中有一些依賴關係,目前只有java.lang.ThreadLocal<Boolean>
。
現在,說我有這個,其中inInstrumentMethod
是一個普通的boolean
:
public static void onEntry(int methodID)
{
if (inInstrumentMethod) {
return;
} else {
inInstrumentMethod = true;
}
System.out.println("Method ID: " + methodID);
inInstrumentMethod = false;
}
代碼編譯和作品。但是,如果我使inInstrumentMethod
a java.lang.ThreadLocal<Boolean>
,我得到一個NoClassDefFoundError。代碼:
private static ThreadLocal<Boolean> inInstrumentMethod = new ThreadLocal<Boolean>() {
@Override protected Boolean initialValue() {
return Boolean.FALSE;
}
};
public static void onEntry(int methodID)
{
if (inInstrumentMethod.get()) {
return;
} else {
inInstrumentMethod.set(true);
}
System.out.println("Method ID: " + methodID);
inInstrumentMethod.set(false);
}
我的猜測是,依賴沒有被正確解析,並java.lang.ThreadLocal
未加載(因而無法找到)。那麼問題是,如何強制Java加載java.lang.ThreadLocal
?在這種情況下,我認爲我不能使用DefineClass
;有沒有其他選擇?
你得到'NoClassDefFoundError'爲什麼類? – EJP