Probekit は Eclipse プラットフォーム上のフレームワークであり、これを使ってプローブを作成したり、
使用したりすることができます。
プローブ は Java™ コード・フラグメントであり、これをプログラム内に挿入して、
そのプログラムに関する情報を実行時に提供することができます。
プローブを理解するためには、以下で説明されているサンプル・プローブから始めてください。
これは、プログラムを実行したときに呼び出される各メソッドを識別するメッセージを印刷する、基本的なプローブです。
プローブは、Probekit エディターへの入力によって定義されます。
このサンプルには単一のフラグメントが含まれています。プローブが何を行うかは、
フラグメント によって決定されます。
フラグメントの定義には、以下の内容が含まれます。
- フラグメント型の指定。
このフラグメントは entry フラグメントで、これはメソッドの入力時に実行されることを意味します。
- フラグメントがアクセスできるデータ項目。
このデータ項目によって、フラグメントがクラス名およびメソッド名にアクセスできるようになります。
- プローブのロジックを定義する Java コード断片。
このフラグメントは System.out.println を呼び出して、
実行するメソッドのクラスおよびメソッド名を表示します。
以下に、プローブが Probekit エディターでどのように見えるかを示します。

Probekit エディターを使用してプローブを作成した後は、
そのプローブをプロジェクト用のクラスおよび JAR ファイルに適用することができます。
そして、プロジェクトを実行するときに、プログラムと一緒にフラグメント・コードが実行されます。
以下に、プローブを作成および使用する方法の概説を、Probekit がどのように役立つかという情報を含めて示します。
- Probekit ソース・ファイルにプローブを作成するには、Probekit エディターを使用します。
Probekit ソース・ファイルの拡張子は .probe でなければなりません。
Probekit ソース・ファイルには 1 つ以上のプローブを含めることができ、各プローブには 1 つ以上のプローブ・フラグメントを
含めることができます。
- Probekit はプローブ・フラグメントをアセンブルして 1 セットの Java メソッドにしてから、それらをコンパイルします。
Probekit がプローブをコンパイルするとき、Probekit はプローブ・フラグメントを
標準の Java 定形文面と結合して、
新しいプローブ・クラス用の Java
ソース・コードを生成します。
プローブ・フラグメントから生成される関数は、新しいプローブ・クラスの静的メソッドとして表示されます。
- プローブを適用するときは、調べたいターゲット・クラスおよび JAR ファイルを指定します。
Probekit バイトコード・インスツルメンテーション (BCI) エンジンが、使用可能なプローブとそれらのターゲット・パターンのリストを参照して、プローブ・フラグメント・メソッドへの呼び出しをターゲット・プログラムに挿入します。
call 文をターゲット・メソッドに挿入するプロセスのことを、インスツルメンテーション といいます。
装備済みのメソッドを含むクラスのことを、プローブ済みクラス といいます。
プローブ・フラグメントが要求するデータ項目 (例えば、メソッド名やクラス名など) が、引数として渡されます。
- プローブを適用した後、通常の方法でプログラムを実行します。
プログラムを実行すると、プローブ・フラグメントも実行されます。
プローブ・フラグメント
型 によって、フラグメントを実行するタイミングが決まります。
以下のタイミングでフラグメントを実行する型を指定することができます。
- メソッドの入り口。
- メソッドの出口 (通常の戻りまたは例外の結果のいずれか)。
- 例外ハンドラー。つまり、catch 文節の先頭、
または例外の結果として呼び出される finally 文節の先頭です。
- クラス静的イニシャライザーのオリジナル・コードの前。
- コードの各実行可能単位の前 (ソース・コード情報が使用可能な場合)。
- 特定のメソッドが呼び出されたとき。
(この場合、呼び出されるメソッドの内側ではなく、呼び出しサイトでインスツルメンテーションが行われます。)
プローブ・フラグメントは、挿入されるメソッドに関してさまざまな種類の情報を提供するデータ項目に
アクセスすることができます。
例えば、以下のようなデータ項目です。
- パッケージ、クラス、およびメソッド名
- メソッド・シグニチャー
- this オブジェクト
- 引数
- 戻り値
特定のクラスおよびメソッドにのみプローブを適用する場合は、
ターゲットを指定するか、あるいはフィルターをセットアップしてください。
詳しくは、『プローブのターゲットおよびフィルター』を参照してください。