内容を事前に知らずに任意のメソッド パラメータにアクセスしたいと思いますが、そうでない場合は、質問を明確にしていただけますか?
ローカル変数に関する JVMTI ドキュメントを参照してください。
まず、ケーパビリティ リストでローカル変数アクセスが有効になっていることを確認する必要があります。次に、 を使用して使用可能なパラメーターを見つけますGetLocalVariableTable
。返されるテーブルには、パラメーターを含む、メソッド内の各ローカル変数の説明が含まれます。Deallocate
終わったら忘れずに。
どの変数がパラメーターであるかを理解する必要があります。これを行うには、現在のローカル変数を見つけて、jlocation
まだ使用できないローカル変数を削除します。これはパラメータの順序を教えてくれませんが、どのローカルがパラメータであるかを教えてくれます。おそらく、スロット番号が正しい順序であると想定できます。
jlocation
現在のusing を見つけ、ローカル変数テーブルを反復処理し、現在の場所以下GetFrameLocation
のローカル変数ごとに、スロット番号と型をパラメーターのリストに追加します。start_location
パラメータごとGetLocal{X}
に、そのタイプに基づいて適切なメソッドを呼び出します。からすでに取得している現在のフレームの深度が必要になりますGetFrameLocation
。
これでパラメータが得られるはずですが、実装が遅く、扱いにくいでしょう。MethodEntry コールバックを回避し、代わりにバイトコード インストルメンテーション (BCI) を使用するというガイドの推奨事項に従う方がはるかに良いでしょう。