1

使用する場合jvmti_env->GetClassFields(objClass, &numOfFields, &fieldIds);でも、GetStatic<Type>Field と Get<Type>Field のどちらを呼び出すかを決定する必要があります。どちらを使用するかを決定するにはどうすればよいですか? java.lang.reflect.Field では、静的フィールドの修飾子を照会できることを知っています。

ここで回避策を見つけました: http://zoo.cs.yale.edu/classes/cs433/programming/examples-java-socket/jdk1.5/hotspot/src/share/vm/runtime/jfieldIDWorkaround.hpp
しかし私は JVM からのソリューションを好みます。
ありがとう!

4

1 に答える 1

1

JVMTI で関数 GetFieldModifiersを使用します。

この関数によって返される値については、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");
于 2012-01-09T20:34:00.040 に答える