1

メソッドごとに、メソッドがスローする可能性のある例外のセットを計算するプロシージャ内分析を実装しようとしています。これには、throw ステートメントによって明示的にスローされるランタイム例外が含まれます。

これまでのところ、SOOT で開始する方法について完全に迷っています。誰でも最初のヒントを教えてもらえますか?

4

2 に答える 2

1

ThrowsAnalysisの実装を確認する必要があります。分析をパラメーター化して、どのステートメントがどの例外をスローできるかについてさまざまな仮定を立てることができます。ただし、この分析は手続き内で行われます。つまり、メソッド呼び出しについて大まかな仮定を行う必要があります。メソッド呼び出しを正確にモデル化したい場合は、 Herosを使用してプロシージャー間分析を作成することをお勧めします。

乾杯、エリック

于 2013-08-21T07:11:16.240 に答える
-1
  1. 拡張または実装するものに従って、ソース ファイルと .class ファイルの本体でクラスとインターフェイスにインデックスを付けます。A が、D を実装する C を拡張する B を拡張する場合、A は、B、C、および D のすべてのクラスのセットに表示されます。
  2. 各メソッド、初期化子、静的初期化子ブロックなどから始めて、呼び出す可能性のある各コンストラクターまたはメソッドを見つけます。各サブクラスに対応するメソッドを含む一連の呼び出されたメソッドを作成します。D のメソッドを呼び出す場合get(int)は、対応するメソッドを A、B、および C に含める必要があります。ステップ 1 のインデックスを使用してそれらを見つけることができます。
  3. 1 つまたは複数のメイン メソッドなど、対象のメソッドから開始して、直接または間接的に呼び出される可能性があるすべてのメソッドとコンストラクターのリストを形成します。実際、「間接呼び出し」は、ステップ 2 で構築された関係の推移的な閉包です。
  4. 手順 3 の結果で、呼び出された可能性のある各メソッドまたはコンストラクターを調べます。各 throw ステートメントについて、オペランドの型を報告します。

コストに見合った利益が得られるとしたら、私は非常に驚くでしょう。

問題領域の一例を次に示します。メソッドを使用する場合は、メソッドとメソッドHashMap get()を使用します。すべてのクラスは直接的または間接的に を拡張するため、いずれかまたはメソッド内の throw ステートメントの引数の型はリストにあります。Object equals()hashCode()Objectequals()hashCode()

于 2013-08-20T02:35:03.850 に答える