2

次のJavaコードがあります

public class Test {
    public void sayHello(String msg) {
         System.out.println(msg);
    }
}

new Test().sayHello("Bonjour");

関数呼び出しをキャッチする Java に接続された jvmti エージェントがあります。メソッドに渡されたパラメータ値を取得したい (例: "Bonjour")

  static void JNICALL cbMethodEntry(jvmtiEnv *jvmti, 
                         JNIEnv* jni_env, jthread thread, jmethodID method) {
        // here I want to get a parameter value "Bonjour"
        // which was passed to my method sayHello("Bonjour")
  }

  jvmtiEventCallbacks    callbacks;
  callbacks.MethodEntry = &cbMethodEntry;

コールバック自体には、スレッドとメソッド ID があります。

jvmti.h ヘッダーを調べると、パラメーターを処理するこの構造のみが見つかりましたが、値はありません。

typedef struct {
    char* name;
    jvmtiParamKind kind;
    jvmtiParamTypes base_type;
    jboolean null_ok;
} jvmtiParamInfo;

コールバックからパラメータ値を取得するにはどうすればよいですか?

4

2 に答える 2

1

GetLocalObjectを使用して開始する必要があります。この点で、正しい方向に進むのに役立つ次の例を見つけることができました。

于 2010-05-21T14:05:24.270 に答える