プローブのターゲット指定

ターゲット仕様は、プローブを適用する対象となるクラスおよびメソッドを指定します。

ターゲット指定はオプションです。ターゲットが指定されていない場合は、インスツルメンテーション・エンジンで処理されるすべてのクラスにプローブが適用されます。

ターゲット指定を使用することで、パッケージ、クラス、およびメソッドの名前、およびメソッドのシグニチャーと突き合わせされるパターンに基づき、インスツルメンテーションにメソッドを組み込んだり除外したりするためのフィルター規則を作成できます。パターンにはワイルドカードを組み込むことができます。ワイルドカードの「*」は、ゼロ以上の文字と一致します。

ターゲットのワイルドカード・パターンが、メソッドのパッケージ、クラス、名前、およびシグニチャーと一致する場合、type プロパティーによって、メソッドにプローブが装備されるか (include)、またはされないか (exclude) が決まります。パターンがメソッドのパッケージ、クラス、名前、およびシグニチャーと一致しない場合は、デフォルトでそのメソッドは装備されます。

ターゲットには、以下のプロパティーが含まれています。
プロパティー 説明
type 必須。type プロパティーにより、プローブをターゲット・メソッドに適用するかどうかが決まります。ワイルドカード・パターンと一致するクラスおよびメソッドにプローブを適用するには include を、除外するには exclude を指定してください。
package オプショナル。クラス名のパッケージ部分と突き合わせるためのワイルドカード・パターンを指定します。例えば、java.util* は、java.util パッケージおよびそのサブパッケージ内の各クラスと一致します。これが指定されていない場合、デフォルト値は * です。
className オプショナル。クラス名と突き合わせるためのワイルドカード・パターンを指定します。これが指定されていない場合、デフォルト値は * です。
method オプショナル。メソッド名と突き合わせるためのワイルドカード・パターンを指定します。これが指定されていない場合、デフォルト値は * です。
signature オプショナル。メソッドのシグニチャーと突き合わせるためのワイルドカード・パターンを指定します。 (シグニチャーは、メソッドの引数および戻りの型を表すストリングです。) メソッド・シグニチャーには、Java 内部フォーマットを使用します。たとえば、(Ljava/lang/Object;)D は、Object をパラメーターとして持ち、double を戻すメソッドのシグニチャーです。このワイルドカード・パターンを使用すると、多重定義のメソッドを区別することができます。これが指定されていない場合、デフォルト値は * です。

注:

  • プローブには、連続するターゲット規則を含む複数のターゲット指定を持たせることができます。特定のメソッドのみにプローブを適用するには、最初に組み込むメソッドを指定して、 次に最終ターゲット指定 package=* className=* method=* signature=* type=exclude を追加します。
  • 指定するパッケージ名およびクラス名は、クラスがインプリメントする任意のインターフェースのパッケージ名およびクラス名に対しても検査されます。たとえば、java.util.HashMap はインターフェース java.util.Map を実装します。あるプローブがパッケージ java.util、クラス名 Map、およびメソッド名 size をターゲットにする場合、そのプローブは、java.util.HashMap.size()、および Map インターフェースを実装するその他のクラスの size メソッドに適用されます。
  • パターン・マッチングでは、継承関係は考慮されません。 クラス Derived がクラス Base を拡張し、プローブが Base.run() をターゲットとする場合、プローブが Derived.run() に自動的に適用されることはありません。
  • ターゲット指定内のパッケージ・パターンが単一のピリオド文字になっている場合、それはグローバルの名前なし Java パッケージを表します。これにより、グローバル・パッケージ内のクラスを明示的にターゲットとすることができます。
  • 呼び出し側プローブは、呼び出されるメソッドのパッケージ、クラス、名前、およびシグニチャーに対してターゲット・パターンおよび規則を突き合わせします。突き合わせは、コンパイル時に認識されていた、呼び出し先メソッドに対して行われます。つまり、継承および仮想関数のために呼び出される実際のメソッドではなく、静的として認識されているクラス名およびメソッド名に対して突き合わせが実行されます。インターフェース参照を介して呼び出しが行われる場合、そのインターフェース名が一致しなければなりません。
例:

ターゲットを指定するには、「プローブ」ページのツリー・ペインにある「ターゲット」を選択し、 「追加」をクリックし、次に編集ペインの「編集」をクリックします。

この例では、パッケージ com.example 内の Proxy で名前が終了するクラス内で Get で名前が始まるメソッドにのみプローブが適用されます。 include 型および exclude 型のターゲット・エントリー。exclude ターゲット・エントリーでは、すべてを除外するためにアスタリスク・ワイルドカードを使用します。include エントリーではターゲットになる正確なメソッドを指定します。これ以外のクラスおよびメソッドは、インスツルメンテーションから除外されます。