1

目前这是我生成 Step 事件的方式:

...
capabilities.can_generate_single_step_events  = 1;
...
callbacks.SingleStep            = SingleStep;
jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_SINGLE_STEP, NULL);

然后是回调本身:

void JNICALL
SingleStep(jvmtiEnv *jvmti_env,
            JNIEnv* jni_env,
            jthread thread,
            jmethodID method,
            jlocation location){

    sum++;  
    char *name;
    char *sig;
    char *gsig;
    jvmti_env->GetMethodName(method, &name, &sig, &gsig);
    printf("%s %s %s\n",name, sig, gsig);
}

但这会为 JVM 内执行的每条指令生成一个事件,即使我有一个带有 3 行代码(并且没有库)的简单控制台应用程序,它也会触发 100 万个步骤事件。如何仅将步骤事件添加到我自己的代码中?

4

0 回答 0