目前这是我生成 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 万个步骤事件。如何仅将步骤事件添加到我自己的代码中?