私はJDI api (Java Debug Interface)を使用しており、特定のメソッドのコードの最初の行だけでなく、メソッドのすべての「終了ポイント」(つまり、すべての「リターン... ;")。
ブレークポイント リクエストを作成するには、Location
オブジェクト (つまり、実行可能コードへのポインターのようなもの)が必要です。
メソッドの最初の行の を取得するLocation
のは比較的簡単です:
theTargetMethod.allLineLocations().get(0)
Location
すべての「出口点」を取得することは、より問題があります。return
メソッドの本文の途中に複数のステートメントが含まれている可能性があるため、メソッドの最後の行を取得するだけでは不十分であり、それらもキャッチする必要があります。
を使用することを検討しましたMethodExitRequest
が、クラスの他のメソッドに関連しているため、必要のない大量のイベントが生成されます。(そのため、ジョブを実行できますが、実行時に大きなオーバーヘッドが発生します)。
Location
だから私の質問は:メソッドのすべての出口点を取得するにはどうすればよいですか?
編集
追加情報
私の特定のユース ケースでは、いくつかのメソッドに対してブレークポイント リクエストを作成する必要があります。関心のあるすべてのメソッドがすべてvoidを返すように見えるので、「return void」命令 (b1) をメソッドのバイトコードを取得し、バイトコード内の b1 のすべてのインデックスに基づいて Locations オブジェクトを作成します。