次の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;
コールバックからパラメータ値を取得するにはどうすればよいですか?