JVMTI - 在类中获取字段的对象

时间:2015-05-02 11:12:07

标签: java oracle jvm java-native-interface jvmti

我遇到了JVMTI的问题。

我想访问类的每个静态字段并标记它。我可以得到每个字段的签名,我可以看出它是否是静态的,但我还没有找到一种方法来获取应该被标记的字段的作业。这是(缩短)到目前为止我所拥有的:

jint fieldCount;
jfieldID* fields_ptr;
int i = 0;
jint err;

err = (*env)->GetClassFields(env, *klass, &fieldCount, &fields_ptr);

for(i = 0; i < fieldCount; i++)
{
  jfieldID field = fields_ptr[i];
  char* name_ptr;
  char* signature_ptr;
  char* generic_ptr;
  jint accessFlags;

  err = (*env)->GetFieldName(env, *klass, field, &name_ptr, &signature_ptr, &generic_ptr);

  (*env)->GetFieldModifiers(env, *klass, field, &accessFlags);  
  if (accessFlags & 0x0008)
    fprintf(file, "STATIC ");
  else
    fprintf(file, "NOT STATIC ");
  fprintf(file, "Field %s of type %s\n", name_ptr, signature_ptr);
}

//TODO: Something like this:
//if (accessFlags & 0x0008) {
//  jobject obj = (*env)->GetStaticField(env, *klass, field);
//  (*env)->SetTag(env, obj, 1);
//}

我现在需要的是一个方法,它给我一个基于* klass(jclass)和field(jfieldID)或类似东西的作业,所以我可以在所有静态字段上调用SetTag(...)。有什么方法吗?

我使用此文档作为参考:http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html

谢谢!

0 个答案:

没有答案