我在JVMTI代理中遇到了jthread
特定事件。我怎么得到:
来自JVMTI代理?
答案 0 :(得分:2)
jthread
是对java.lang.Thread
对象的常规JNI引用。您可以使用它来访问字段并调用Thread实例上的方法,例如
jclass threadClass = jniEnv->FindClass("java/lang/Thread");
jmethodID methodID = jniEnv->GetMethodID(threadClass, "getId", "()J");
jlong id = jniEnv->CallLongMethod(thread, methodID);
或者,您可以使用JVMTI Codepen函数将线程名称设为char*
。
线程的线程本地可以通过package-private GetThreadInfo
字段进行访问。
答案 1 :(得分:1)
为了访问局部变量,您可以调用GetLocalVariabletable()来检索变量条目的表(数组),并使用槽号来获取从变量条目获得的变量,您可以调用getlocalXXX系列函数来获取变量的值,具体取决于变量签名(也是从变量表项中获得)并使用setlocalXXX()函数设置它。进一步读取对象子类即类对象,您可以在使用getlocalobject检索的作业上使用jni系列函数。