Fault Analyzer JVMTI エージェントの使用

Fault Analyzer は JVMTI (JVM Tool Interface) エージェントを提供します。このエージェントは Java 仮想マシン (JVM) の内部で実行し、実行中の Java アプリケーションの状態を検査することができます。

Fault Analyzer エージェントは次のコマンドライン・オプションを使用して起動時に追加されます。

java -agentpath:<path-to-agent> <java Class Name>

例えば、エージェントを使用して、「HelloWorld」を実行する次のコマンドを指定できます。

java -agentpath:IDIJAGNT.so HelloWorld
Java インスツルメンテーション API を使用して、起動後にエージェントを追加できますか。
いいえ、Fault Analyzer エージェントは JVM の初期化前のみ使用可能な特定の JVMTI 機能を要求します。
Fault Analyzer エージェントは何を行いますか。
JVM が起動すると、エージェントは JVM により使用可能になるローカル変数についての情報を要求します。これは、JVM がフルスピード・デバッグ (FSD) モードで実行することを示しています。

すべての例外に対し、エージェントは既知の catch ブロックがあるかどうかをチェックします。ない場合、エージェントは現在のスレッド・スタック・フレームのローカル変数を含む障害項目を作成します。

エージェントが抽出するのは何の情報ですか。
エージェントはすべてのアクセス可能なローカル変数を現在のスレッドとともに取得します。収集される具体的な情報は、現在実行しているスタック・フレームの種類によって異なります。
  • Java インスタンス・フレーム:
    • 実行中の行およびファイル名が抽出されます。
    • すべてのローカル変数のタイプ、名前、および値が抽出されます。
    • ローカル・インスタンスの、修飾子、タイプ、名前、および値を含む、すべてのフィールドが抽出されます。
  • Java 静的フレーム:
    • 実行中の行およびファイル名が抽出されます。
    • すべてのローカル変数のタイプ、名前、および値が抽出されます。
    • メソッドのクラスを宣言する、静的フィールド修飾子、タイプ、名前。および値を含む、静的フィールド。
  • ネイティブ・フレーム:
    • 「ローカル・インスタンス」の、修飾子、タイプ、名前、および値を含む、フィールドが抽出されます。
  • 静的ネイティブ・フレーム:
    • メソッドのクラスを宣言する、静的フィールド修飾子、タイプ、名前。および値を含む、静的フィールド。
Java プログラムが JNI を使用して COBOL プログラムを呼び出して、異常終了しました。エージェントはこれを報告しますか。
いいえ、JVMTI API は Java 例外へのアクセスのみを許可します。異常終了が発生すると、JVM はアクティブではなくなり、ローカル変数名に関する情報は使用できなくなります。
Fault Analyzer は JNI 異常終了に対して何をレポートできますか。
Fault Analyzer は DTFJ API を使用した事後分析を実行します。

DTFJ API はローカル変数情報のサブセットへのアクセスを許可します。具体的には、JavaStackFrame インターフェースにより戻されるすべてのオブジェクト・リファレンスです。この API は変数名を提供しません。オブジェクト値のみです。

JavaStackFrame および DTFJ API に関する詳細は、「IBM® SDK, Java Technology Edition」を参照してください。