Почему обратный вызов JVMTi ClassPrepared срабатывает не для всех классов - PullRequest
0 голосов
/ 30 декабря 2018

Почему обратный вызов 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;
}
...