我正在使用JVMTI库为java编写本机代理,并尝试获取访问本地变量的功能。 在OnLoad阶段加载代理时,可以启用该功能,但是在实时阶段(OnAttach)加载时似乎是不可能的,当我尝试添加它时,我收到错误 - JVMTI_ERROR_ABSENT_INFORMATION。 / p>
这是我的OnAttach功能(C语言)
JNIEXPORT
jint
JNICALL
Agent_OnAttach(
JavaVM *jvm,
char *options,
void *reserved
)
{
jvmtiEnv *jvmti;
jvmtiCapabilities PotentialCap, RequestedCap;
jvmtiError error;
memset(&RequestedCap, 0, sizeof(RequestedCap));
jvm->GetEnv((PVOID*)&jvmti, JVMTI_VERSION_1_0);
jvmti->GetPotentialCapabilities(&PotentialCap);
RequestedCap.can_access_local_variables = 1;
error = jvmti->AddCapabilities(&RequestedCap);
if (error != JVMTI_ERROR_NONE)
{
MessageBox(
NULL,
L"Fail to request local variable access",
L"Native Agent",
NULL);
}
return JNI_OK;
}
有没有办法在实时阶段启用本地变量访问?
由于
答案 0 :(得分:0)
在HotSpot JVM中,在实时阶段无法添加访问本地变量的功能,只能在加载阶段(正如您在问题中所观察到的那样)。
您可以看到此here(已在init_onload_capabilities
中启用,而不是init_always_capabilities
)。