为什么不是对所有类都触发JVMTi ClassPrepared回调?
例如,我调用java.lang.System.load()
,但是类java.lang.System
不会触发回调。
正如在文档中所写:
完成类准备后,将生成类准备事件。 ...不会为原始类生成类准备事件(对于 例如java.lang.Integer.TYPE)。
但是System
类不是原始类。
这是我的Agent_OnLoad
方法:
JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved) {
jvmtiEnv *jvmti;
if (vm->GetEnv((void **)&jvmti, JVMTI_VERSION_1_2) != JNI_OK)
ExitProcess(2);
jvmtiEventCallbacks callbacks = {0};
callbacks.ClassPrepare = ClassPrepare;
jvmti->SetEventCallbacks(&callbacks, sizeof(callbacks));
jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_CLASS_PREPARE, NULL);
return JNI_OK;
}