Probekit は、プローブの記述と使用のための Eclipse プラットフォーム上のフレームワークです。
プローブは、プログラムに挿入可能な Java™ コード・フラグメントであり、実行時にそのプログラムに関する情報を提供します。
プローブを理解するには、ここで解説されているサンプル・プローブから開始してください。
これは、プログラムの実行時に呼び出されるすべてのメソッドを識別するメッセージを出力する基本プローブです。
プローブは、Probekit エディターで作成するエントリーによって定義されます。このサンプルには、単一のフラグメントが含まれています。
フラグメントは、プローブが行うことを決定します。フラグメント定義には、以下のようなものがあります。
- フラグメント型の仕様。このフラグメントは、エントリー・フラグメントです。つまり、このフラグメントは、メソッド入り口時に実行されます。
- フラグメントがアクセス可能なデータ項目。
ここでは、データ項目によって、フラグメントはクラスおよびメソッド名にアクセスできます。
- プローブのロジックを定義する Java コードのスニペット。
このフラグメントは、System.out.println を呼び出して、実行するメソッドのクラスおよびメソッド名を表示します。
以下に、プローブが Probekit エディターでどのように表示されるかを示します。

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