Если я использую jvmti_env->GetClassFields(objClass, &numOfFields, &fieldIds);, мне все равно нужно решить, вызывать ли GetStatic Field или Get Field.Как мне определить, какой использовать?Я знаю, что в java.lang.reflect.Field я могу запрашивать модификаторы полей для статического.
jvmti_env->GetClassFields(objClass, &numOfFields, &fieldIds);
Я нашел здесь обходной путь: http://zoo.cs.yale.edu/classes/cs433/programming/examples-java-socket/jdk1.5/hotspot/src/share/vm/runtime/jfieldIDWorkaround.hpp Но я предпочитаю решение изJVM. Спасибо!
Используйте функцию GetFieldModifiers в JVMTI.
Значения, возвращаемые этой функцией, описаны здесь: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#1480
Так что для статического вы должны проверить вот так:
jint accessFlags ... (*jvmti)->GetFieldModifiers(jvmti, objClass, fieldIds[i], &accessFlags); if (accessFlags & 0x0008) printf("STATIC\n"); else printf("NOT STATIC\n");