あなたはあなたの質問を明確にすることができない場合は、そのコンテンツの予知なしに任意のメソッドパラメータにアクセスしたいと思いますか?
JVMTI docs on local variablesを参照してください。
まず、機能リストでローカル変数アクセスを有効にする必要があります。次に、GetLocalVariableTable
を使用して、使用可能なパラメータを調べます。返されるテーブルには、パラメータを含むメソッド内の各ローカル変数の説明が含まれます。完了したらDeallocate
を忘れないでください。
どの変数がパラメータであるかを調べる必要があります。現在のjlocation
を見つけて、まだ利用できないローカル変数を削除することで、これを行うことができます。これは、パラメータの順序を教えてくれるわけではありませんが、どのローカル変数がパラメータであるかがわかります。おそらく、スロット番号が正しい順序であると仮定できます。
は、GetFrameLocation
を使用して、現在のjlocation
検索ローカル変数テーブルを反復し、そのstart_location
以下現在地に等しい各ローカル変数のために、パラメータのリストにスロット番号およびタイプを追加します。
各パラメータについて、そのタイプに基づいて適切なGetLocal{X}
メソッドを呼び出します。あなたはすでに持っているあなたの現在のフレームの深さがGetFrameLocation
から必要です。
これはパラメータを取得するはずですが、実装するのが遅くて手間がかかります。 MethodEntryコールバックを回避し、代わりにバイトコードインストルメンテーション(BCI)を使用することをお勧めします。
jobject変数を取得したとしましょう.jvmtiを使用してjobject変数のフィールドを抽出するにはどうすればよいですか? – kumarD