Java

JavaTM Debug Wire Protocol 仕様の詳細


  • VirtualMachine コマンドセット (1)
  • ReferenceType コマンドセット (2)
  • ClassType コマンドセット (3)
  • ArrayType コマンドセット (4)
  • InterfaceType コマンドセット (5)
  • Method コマンドセット (6)
  • Field コマンドセット (8)
  • ObjectReference コマンドセット (9)
  • StringReference コマンドセット (10)
  • ThreadReference コマンドセット (11)
  • ThreadGroupReference コマンドセット (12)
  • ArrayReference コマンドセット (13)
  • ClassLoaderReference コマンドセット (14)
  • EventRequest コマンドセット (15)
  • StackFrame コマンドセット (16)
  • ClassObjectReference コマンドセット (17)
  • Event コマンドセット (64)
  • Error 定数
  • EventKind 定数
  • ThreadStatus 定数
  • SuspendStatus 定数
  • ClassStatus 定数
  • TypeTag 定数
  • Tag 定数
  • StepDepth 定数
  • StepSize 定数
  • SuspendPolicy 定数
  • InvokeOptions 定数

    VirtualMachine コマンドセット (1)

    Version コマンド (1)
    ターゲットの VM により実装された JDWP のバージョンを返します。バージョン文字列の書式は、実装に依存します。
    出力データ
    (なし)
    応答データ
    stringdescriptionVM バージョンのテキスト情報
    intjdwpMajorJDWP のメジャーバージョン番号
    intjdwpMinorJDWP のマイナーバージョン番号
    stringvmVersionターゲット VM の JRE バージョン (java.version プロパティなどで使用)
    stringvmNameターゲット VM 名 (java.vm.name プロパティなどで使用)
    ClassesBySignature コマンド (2)
    指定されたシグニチャーと一致するターゲット VM によりロードされたクラスすべての参照型を返します。複数のクラスローダが同名のクラスをロードしている場合、複数の参照型が返されます。検索は、ロードされたクラスだけに制限されます。 特定のシグニチャーを持つクラスのロードは行われません。
    出力データ
    stringsignature検索対象のクラスの JNI シグニチャー (例、"Ljava/lang/String;")    
    応答データ
    intclasses全参照型の数
    classes 回の繰り返し:
    byterefTypeTag続く参照型の種類    
    referenceTypeIDtypeID対応するロードされた参照型
    intstatus現在のクラスのステータス    
    AllClasses コマンド (3)
    ターゲット VM が現在ロードしているクラスすべての参照型を返します。
    出力データ
    (なし)
    応答データ
    intclasses全参照型の数
    classes 回の繰り返し:
    byterefTypeTag続く参照型の種類    
    referenceTypeIDtypeIDロードされた参照型
    stringsignatureロードされた参照型の JNI シグニチャー
    intstatus現在のクラスのステータス    
    AllThreads コマンド (4)
    ターゲット VM で実行中のすべてのスレッドを返します。返されるリストには、java.lang.Thread により作成されるスレッド、JNI 経由でターゲット VM に接続するすべてのネイティブスレッド、およびターゲット VM により作成されるシステムスレッドが含まれます。開始されていないスレッドおよび実行の完了したスレッドは、リストには含まれません。
    出力データ
    (なし)
    応答データ
    intthreads全スレッドの数
    threads 回の繰り返し:
    threadIDthread実行中のスレッド
    TopLevelThreadGroups コマンド (5)
    親を持たないスレッドグループすべてを返します。このコマンドは、既存のスレッドグループの (1 つまたは複数の) ツリーを構築する最初の手順で使用されることがあります。
    出力データ
    (なし)
    応答データ
    intgroups全スレッドグループの数
    groups 回の繰り返し:
    threadGroupIDgroupトップレベルのスレッドグループ
    Dispose コマンド (6)
    この Virtual Machine のミラーを無効にします。ターゲット VM への通信チャネルは閉じられ、ターゲット VM はこのデバッガまたは別のデバッガからの次の接続を受け付ける準備を行います。ターゲット VM で実行中のすべてのメソッド呼び出しの実行は、切断後も継続されます。この種のメソッド呼び出しが完了すると、呼び出し元のスレッドは、停止した場所から実行を継続します。

    この VirtualMachine (ObjectReferences、ReferenceTypes など) を起源とするリソースは、無効になります。

    出力データ
    (なし)
    応答データ
    (なし)
    IDSizes コマンド (7)
    ターゲット VM 内に存在する可変サイズのデータ型のサイズを返します。戻り値は、識別子がコマンドおよび応答パケットで使用するバイト数を示します。
    出力データ
    (なし)
    応答データ
    intfieldIDSizefieldID のサイズ (バイト単位)
    intmethodIDSizemethodID のサイズ (バイト単位)
    intobjectIDSizeobjectID のサイズ (バイト単位)
    intreferenceTypeIDSizereferenceTypeID のサイズ (バイト単位)
    intframeIDSizeframeID のサイズ (バイト単位)
    Suspend コマンド (8)
    ターゲット VM で稼動中のアプリケーションの実行を中断します。現在実行中の Java スレッドは、すべて中断されます。

    java.lang.Thread.suspend とは異なり、Virtual Machine と個別のスレッド両方の中断がカウントされます。スレッドを再び実行する前に、VMレベルの resume コマンドまたはスレッドレベルの resume コマンドを使って、中断の実行回数と同じ数だけ再開を実行する必要があります。

    出力データ
    (なし)
    応答データ
    (なし)
    Resume コマンド (9)
    suspend コマンドの実行後またはイベントの停止後に、アプリケーションの実行を再開します。Virtual Machine および個別のスレッドの中断は、カウントされます。特定のスレッドの中断回数が n 回の場合、そのスレッドを続行する前に n 回再開する必要があります。
    出力データ
    (なし)
    応答データ
    (なし)
    Exit コマンド (10)
    指定された終了コードでターゲット VM を終了させます。以前にターゲット VM から返された ID すべては、無効になります。VM で実行中のスレッドは、不意に停止します。スレッド終了例外はスローされないため、最終的にブロックは実行されません。
    出力データ
    intexitCode終了コード
    応答データ
    (なし)
    CreateString コマンド (11)
    ターゲット VM 内に文字列オブジェクトを新規作成し、その ID を返します。
    出力データ
    stringutf作成された文字列内で使用する UTF-8 形式の文字    
    応答データ
    stringIDstringObject作成された文字列 (java.lang.String のインスタンス)
    Capabilities コマンド (12)
    VM の機能を取得します。各機能は、boolean 型で返され、ある機能が存在するかどうかを示します。各機能に関連するコマンドは、その機能が利用できない場合、NOT_IMPLEMENTED エラーを返します。
    出力データ
    (なし)
    応答データ
    booleancanWatchFieldModificationVM がフィールドの変更を監視して、変更ウォッチポイントイベントを送信可能かどうか
    booleancanWatchFieldAccessVM がフィールドへのアクセスを監視して、アクセスウォッチポイントイベントを送信可能かどうか
    booleancanGetBytecodesVM が、指定されたメソッドのバイトコードを取得可能かどうか    
    booleancanGetSyntheticAttributeフィールドまたはメソッドが合成である場合、VM がそれを判定可能かどうか (つまり、メソッドまたはフィールドがコンパイラにより生成された場合、VM がそれを判定可能かどうか)  
    booleancanGetOwnedMonitorInfo所有されたスレッドのモニター情報を、VM が取得可能かどうか
    booleancanGetCurrentContendedMonitor現在競合しているスレッドのモニターを、VM が取得可能かどうか
    booleancanGetMonitorInfo指定されたオブジェクトのモニター情報を、VM が取得可能かどうか    
    ClassPaths コマンド (13)
    ターゲット VM の classpath および bootclasspath を取得します。classpath が未定義の場合、空リストを返します。bootclasspath が未定義の場合、空リストを返します。
    出力データ
    (なし)
    応答データ
    stringbaseDir次のリスト内のいずれかの相対パス解決で使用されるベースディレクトリ
    intclasspathsclasspath 内のパスの数
    classpaths 回の繰り返し:
    stringpathclasspath の 1 コンポーネント
    intbootclasspathsbootclasspath 内のパスの数
    bootclasspaths 回の繰り返し:
    stringpathbootclasspath の 1 コンポーネント
    DisposeObjects コマンド (14)
    オブジェクト ID のリストを解放します。リスト内の各オブジェクトに対して、以下の内容が適用されます。リスト内のオブジェクト ID を使って、コマンドがこれ以上送信されることはありません。オブジェクトがまだガベージコレクトされていない場合、ID に関連付けられたすべてのバックエンドリソースが解放されます。 オブジェクトのガベージコレクションが無効な場合は、再度有効化されます。

    このコマンドの使用は、必須ではありません。このコマンドが送信されない場合、各 ID に関連付けられたリソースは、対応するオブジェクトのガベージコレクション実行後、バックエンドにより解放されます。このコマンドのもっとも効果的な利用法は、大量のオブジェクト (大規模な配列など) がバックエンドから取得されているが、すぐにはガベージコレクションが行われない場合に、バックエンドの負荷を軽減することです。

    このコマンドを使ってオブジェクト ID の破棄が行われたあとで、オブジェクト ID がバックエンドにより再利用されることがあります。

    出力データ
    intrequests全オブジェクト破棄要求の数
    requests 回の繰り返し:
    objectIDobjectオブジェクト ID
    intrefCntこのオブジェクト ID がバックエンドから受け取ったパケットの一部となった回数。オブジェクト ID が着信するパケットの一部で、かつフロントエンドにより処理されていない場合、正確なカウントは、オブジェクト ID がバックエンドで解放されることを防ぎます。
    応答データ
    (なし)
    HoldEvents コマンド (15)
    ターゲット VM に対し、イベントの送信を中止するよう伝えます。イベントは破棄されるのではなく、次に ReleaseEvents コマンドが送信されるまで保持されます。大量のイベントが生成される状況で、デバッガ VM に送信されるイベントの数を制御する場合に、このコマンドは有用です。イベントはデバッガバックエンドにより保持されます。 アプリケーションの実行は、バッファがオーバーフローしないよう、デバッガバックエンドにより凍結されます。コマンドへの応答は保持されないため、このコマンドによる影響はありません。イベントが既に保持されている場合、このコマンドは無視されます。
    出力データ
    (なし)
    応答データ
    (なし)
    ReleaseEvents コマンド (16)
    ターゲット VM に対し、イベントの送信を継続するよう伝えます。このコマンドは、HoldEvents コマンドの実行後に通常のアクティビティを復元する際に使用されます。現在有効な HoldEvents コマンドが存在しない場合、このコマンドは無視されます。
    出力データ
    (なし)
    応答データ
    (なし)

    ReferenceType コマンドセット (2)

    Signature コマンド (1)
    参照型の JNI シグニチャーを返します。JNI シグニチャー形式については、Java Native Inteface 仕様を参照してください。

    プリミティブクラスの場合、返されるシグニチャーは対応するプリミティブ型のシグニチャーです。 たとえば、「I」は、java.lang.Integer.TYPE により表されるクラスのシグニチャーとして返されます。

    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    stringsignature参照型の JNI シグニチャー
    ClassLoader コマンド (2)
    指定された参照型をロードした java.lang.ClassLoader のインスタンスを返します。システムクラスローダにより参照型がロードされた場合、返されるオブジェクト ID は null になります。
    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    classLoaderIDclassLoader参照型のクラスローダ    
    Modifiers コマンド (3)
    参照型の修飾子 (アクセスフラグとしても知られる) を返します。返されるビットマスクには、参照型の宣言に関する情報が含まれます。参照型がプリミティブクラス (例、java.lang.Integer.TYPE) の配列である場合、返されるビットマスクの値は定義されません。
    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    intmodBitsVM 仕様で定義された修飾子ビット
    Fields コマンド (4)
    参照型の各フィールドに関する情報を返します。継承したフィールドは含まれません。フィールドリストには、コンパイラにより作成されたすべての合成フィールドが含まれます。クラスファイル内で出現する順番に、フィールドが返されます。
    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    intdeclared宣言されたフィールドの数
    declared 回の繰り返し:
    fieldIDfieldIDフィールド ID
    stringnameフィールド名
    stringsignatureJNI シグニチャーフィールド
    intmodBitsフィールド宣言に関する補足情報を提供する修飾子ビットフラグ (アクセスフラグとしても知られる)。個別のフラグ値は、VM 仕様で定義されています。また、合成属性機能を利用可能な場合には、0xf0000000 ビットはフィールドを合成フィールドとして識別します。
    Methods コマンド (5)
    参照型の各メソッドに関する情報を返します。継承したフィールドは含まれません。メソッドのリストには、コンストラクタ (名前「<init>」で識別される)、存在する場合には初期化メソッド (名前「<clinit>」で識別される)、およびコンパイラにより作成されたすべての合成メソッドが含まれます。メソッドは、クラスファイル内で出現する順番に返されます。
    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    intdeclared宣言されたメソッドの数
    declared 回の繰り返し:
    methodIDmethodIDメソッド ID
    stringnameメソッドの名前
    stringsignatureメソッドの JNI シグニチャー
    intmodBitsメソッド宣言に関する補足情報を提供する修飾子ビットフラグ (アクセスフラグとしても知られる)。個別のフラグ値は、VM 仕様で定義されています。また、合成属性機能を利用可能な場合には、0xf0000000 ビットはメソッドを合成メソッドとして識別します。
    GetValues コマンド (6)
    参照型の 1 つまたは複数の static フィールドの値を返します。各フィールドは、参照型のメンバまたはそのスーパークラス、スーパーインタフェース、または実装されたインタフェースの 1 つでなければなりません。アクセス制御は実行されません。 このため、たとえば private フィールドの値が取得可能になります。
    出力データ
    referenceTypeIDrefType参照型 ID
    intfields取得する値の数
    fields 回の繰り返し:
    fieldIDfieldID取得対象のフィールド
    応答データ
    intvalues返される値の数
    values 回の繰り返し:
    valuevalueフィールド値
    SourceFile コマンド (7)
    参照型の宣言されたソースファイル名を返します。
    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    stringsourceFileソースファイル名。ファイルのパス情報は含まれません。
    NestedTypes コマンド (8)
    この型の内部で直接ネストしたクラスとインタフェースを返します。これらの型の内部でさらにネストしたタイプは含まれません。
    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    intclassesネストしたクラスとインタフェースの数
    classes 回の繰り返し:
    byterefTypeTag続く参照型の種類    
    referenceTypeIDtypeIDネストしたクラスまたはインタフェース ID
    Status コマンド (9)
    参照型の現在のステータスを返します。VM 仕様で説明されているように、ステータスは参照型の初期化の程度を示します。返されるステータスビットは、配列型およびプリミティブクラス (java.lang.Integer.TYPE など) に対して未定義です。
    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    intstatusステータスビット: JDWP.ClassStatus を参照してください。
    Interfaces コマンド (10)
    このクラスによる実装が宣言されたインタフェースを返します。間接的に実装された (実装済みのインタフェースから継承した、またはスーパークラスが実装した) インタフェースは、含まれません。
    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    intinterfaces実装したインタフェースの数
    interfaces 回の繰り返し:
    interfaceIDinterfaceType実装されたインタフェース
    ClassObject コマンド (11)
    この型に対応するクラスオブジェクトを返します。
    出力データ
    referenceTypeIDrefType参照型 ID
    応答データ
    classObjectIDclassObjectクラスオブジェクト

    ClassType コマンドセット (3)

    Superclass コマンド (1)
    クラスの直属のスーパークラスを返します。
    出力データ
    classIDclazzクラス型 ID
    応答データ
    classIDsuperclassスーパークラス (java.lang.Object のクラス ID が指定されている場合は null)
    SetValues コマンド (2)
    1 つまたは複数の static フィールドの値を設定します。各フィールドは、クラス型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースの 1 つでなければなりません。アクセス制御は実行されません。 このため、たとえば private フィールドの値が設定可能になります。最後のフィールドを設定することはできません。プリミティブ値の場合、値の型とフィールドの型は正確に一致している必要があります。オブジェクト値の場合、値の型からフィールドの型への広範な参照変換が存在し、かつフィールドの型がロードされている必要があります。
    出力データ
    classIDclazzクラス型 ID
    intvalues設定するフィールドの数
    values 回の繰り返し:
    fieldIDfieldID設定するフィールド
    untagged-valuevalueフィールドに入力する値
    応答データ
    (なし)
    InvokeMethod コマンド (3)
    static メソッドを呼び出します。メソッドは、クラス型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースの 1 つでなければなりません。アクセス制御は実行されません。 このため、たとえば private メソッドの呼び出しが可能です。

    メソッド呼び出しが、指定されたスレッドで実行されます。メソッド呼び出しは、指定されたスレッドがイベントにより中断されている場合にだけ実行されます。ターゲット VM がフロントエンドにより中断されている場合には、メソッド呼び出しはサポートされません。

    指定されたメソッドは、指定された引数リスト内の引数を使って呼び出されます。メソッド呼び出しは同期的に行われます。 そのため、呼び出されたメソッドがターゲット VM 内で復帰するまで、応答パケットは送信されません。戻り値 (大抵の場合、void 値) は応答パケットに含まれます。呼び出されたメソッドが例外をスローする場合、例外オブジェクト ID が応答パケットに設定されます。 それ以外の場合、例外オブジェクト ID は null になります。

    プリミティブ引数の場合、引数値の型と引数の型は厳密に一致している必要があります。オブジェクト引数の場合、引数値の型から引数の型への広範な参照変換が存在し、かつ引数の型をロードする必要があります。

    デフォルトでは、ターゲット VM 内のすべてのスレッドがイベントまたはコマンドによって以前に中断された場合、それらはメソッドの呼び出し中に再開されます。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ブレークポイントまたは他のイベントが、呼び出し中に発生する可能性があります。ただし、この暗黙の再開動作が ThreadReference 再開コマンドの動作とほとんど同じであることに注意してください。 このため、スレッドの中断カウントが 1 を超えている場合、呼び出し中も中断状態のままになります。デフォルトでは、呼び出し前の状態が何であっても、ターゲット VM 内のすべてのスレッドは呼び出し完了時に中断します。

    options フィールドに INVOKE_SINGLE_THREADED ビットフラグを指定することにより、呼び出し中の他のスレッドの再開を防ぐことができます。 ただし、前述したデッドロックから保護したり、それを回復したりすることはできないため、オプションは注意深く指定してください。指定されたスレッドだけが再開されます (前述したすべてのスレッドと同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドは再び中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。

    ターゲット VM が (たとえば、VirtualMachine 破棄コマンドを使って) 呼び出し中に切断されると、 メソッド呼び出しは続行されます。

    出力データ
    classIDclazzクラス型 ID
    threadIDthread呼び出しを実行するスレッド
    methodIDmethod呼び出し先のメソッド
    intarguments 
    arguments 回の繰り返し:
    valuearg引数の値
    intoptions呼び出しオプション
    応答データ
    valuereturnValue戻り値
    tagged-objectIDexception生成された例外
    NewInstance コマンド (4)
    指定されたコンストラクタを呼び出して、この型の新規オブジェクトを作成します。コンストラクタメソッド ID は、クラス型のメンバでなければなりません。

    インスタンスの作成は、指定されたスレッドで実行されます。インスタンス作成は、指定されたスレッドがイベントにより中断されている場合にだけ実行されます。ターゲット VM がフロントエンドにより中断されている場合には、メソッド呼び出しはサポートされません。

    指定されたコンストラクタは、指定された引数リスト内の引数を使って呼び出されます。コンストラクタ呼び出しは同期的に行われます。 そのため、呼び出されたメソッドがターゲット VM 内で復帰するまで、応答パケットは送信されません。戻り値 (大抵の場合、void 値) は応答パケットに含まれます。コンストラクタが例外をスローする場合、例外オブジェクト ID が応答パケットに設定されます。 それ以外の場合、例外オブジェクト ID は null になります。

    プリミティブ引数の場合、引数値の型と引数の型は厳密に一致している必要があります。オブジェクト引数の場合、引数値の型から引数の型への広範な参照変換が存在し、かつ引数の型をロードする必要があります。

    デフォルトでは、ターゲット VM 内のすべてのスレッドがイベントまたはコマンドによって以前に中断された場合、それらはメソッドの呼び出し中に再開されます。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ブレークポイントまたは他のイベントが、呼び出し中に発生する可能性があります。ただし、この暗黙の再開動作が ThreadReference 再開コマンドの動作とほとんど同じであることに注意してください。 このため、スレッドの中断カウントが 1 を超えている場合、呼び出し中も中断状態のままになります。デフォルトでは、呼び出し前の状態が何であっても、ターゲット VM 内のすべてのスレッドは呼び出し完了時に中断します。

    options フィールドに INVOKE_SINGLE_THREADED ビットフラグを指定することにより、呼び出し中の他のスレッドの再開を防ぐことができます。 ただし、前述したデッドロックから保護したり、それを回復したりすることはできないため、オプションは注意深く指定してください。指定されたスレッドだけが再開されます (前述したすべてのスレッドと同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドは再び中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。

    ターゲット VM が (たとえば、VirtualMachine 破棄コマンドを使って) 呼び出し中に切断されると、 メソッド呼び出しは続行されます。

    出力データ
    classIDclazzクラス型 ID
    threadIDthreadコンストラクタを呼び出すスレッド
    methodIDmethod呼び出し先のコンストラクタ
    intarguments 
    arguments 回の繰り返し:
    valuearg引数の値
    intoptionsコンストラクタ呼び出しオプション
    応答データ
    tagged-objectIDnewObject新規に作成されたオブジェクト、またはコンストラクタが例外をスローする場合は null
    tagged-objectIDexceptionスローされた例外 (存在する場合)、または null

    ArrayType コマンドセット (4)

    NewInstance コマンド (1)
    この型の配列オブジェクトを、指定された長さで新規作成します。
    出力データ
    arrayIDarrType新規インスタンスの配列型
    intlength配列の長さ
    応答データ
    tagged-objectIDnewArray新規作成された配列オブジェクト    

    InterfaceType コマンドセット (5)

    Method コマンドセット (6)

    LineTable コマンド (1)
    メソッドの行番号情報を返します。行テーブルは、ソース行番号を、行の初期コードインデックスにマッピングします。行テーブルは、コードインデックスにより (昇順で) 順序付けされます。
    出力データ
    referenceTypeIDclassIDクラス
    methodIDmethodIDメソッド
    応答データ
    longstartメソッド用の有効な最小コードインデックス
    longendメソッド用の有効な最大コードインデックス
    intlines行番号
    lines 回の繰り返し:
    longlineCodeIndex行の初期コードインデックス (符号なし)
    intlineNumber行番号
    VariableTable コマンド (2)
    メソッドの変数情報を返します。変数テーブルには、メソッド内で宣言された引数と局所変数が含まれます。インスタンスメソッドの場合、「this」参照がテーブルに含まれます。また、合成変数が存在する場合もあります。
    出力データ
    referenceTypeIDclassIDクラス
    methodIDmethodIDメソッド
    応答データ
    intargCnt引数で使用されるフレーム内のワード数。8 バイトの引数は 2 つのワードを使用し、その他の引数は 1 つのワードを使用します。  
    intslots変数の数
    slots 回の繰り返し:
    longcodeIndex変数が可視状態にある最初のコードインデックス (符号なし)。length と共に使用します。現在の codeIndex <= 現在のフレームコードインデックス < codeIndex + length という条件が満たされる場合にのみ、変数の取得または設定が可能です。
    stringname変数の名前
    stringsignature変数型の JNI シグニチャー
    intlengthcodeIndex と共に使用される符号なしの値。現在の codeIndex <= 現在のフレームコードインデックス < code Index + length という条件が満たされる場合にのみ、変数の取得または設定が可能です。
    intslotフレーム内に存在する局所変数のインデックス
    Bytecodes コマンド (3)
    メソッドのバイトコードを、JVM 仕様の定義に従って取得します。
    出力データ
    referenceTypeIDclassIDクラス
    methodIDmethodIDメソッド
    応答データ
    intbytes 
    bytes 回の繰り返し:
    bytebytecodeJava バイトコード

    Field コマンドセット (8)

    ObjectReference コマンドセット (9)

    ReferenceType コマンド (1)
    オブジェクトの実行時の型を返します。実行時の型は、クラスまたは配列です。
    出力データ
    objectIDobjectオブジェクト ID
    応答データ
    byterefTypeTag続く参照型の種類    
    referenceTypeIDtypeID実行時の参照型
    GetValues コマンド (2)
    1 つまたは複数のインスタンスフィールドの値を返します。各フィールドは、オブジェクトの型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースのいずれかでなければなりません。アクセス制御は実行されません。 このため、たとえば private フィールドの値が取得可能になります。
    出力データ
    objectIDobjectオブジェクト ID
    intfields取得する値の数
    fields 回の繰り返し:
    fieldIDfieldID取得するフィールド
    応答データ
    intvalues返される値の数
    values 回の繰り返し:
    valuevalueフィールド値
    SetValues コマンド (3)
    1 つまたは複数のインスタンスフィールドの値を設定します。各フィールドは、オブジェクトの型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースのいずれかでなければなりません。アクセス制御は実行されません。 このため、たとえば private フィールドの値が設定可能になります。プリミティブ値の場合、値の型とフィールドの型は正確に一致している必要があります。オブジェクト値の場合、値の型からフィールドの型への広範な参照変換が存在し、かつフィールドの型がロードされている必要があります。
    出力データ
    objectIDobjectオブジェクト ID
    intvalues設定するフィールドの数
    values 回の繰り返し:
    fieldIDfieldID設定するフィールド
    untagged-valuevalueフィールドに入力する値
    応答データ
    (なし)
    MonitorInfo コマンド (5)
    オブジェクトのモニター情報を返します。VM 内のすべてのスレッドを中断する必要があります。
    出力データ
    objectIDobjectオブジェクト ID
    応答データ
    threadIDownerモニターの所有者、または null (所有されていない場合)
    intentryCountモニターが入力された回数
    intwaiters現在の所有者が存在しない場合は、モニター 0 を待機中のスレッド数
    waiters 回の繰り返し:
    threadIDthreadこのモニターを待機中のスレッド
    InvokeMethod コマンド (6)
    インスタンスメソッドを呼び出します。メソッドは、オブジェクトの型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースのいずれかでなければなりません。アクセス制御は実行されません。 このため、たとえば private メソッドの呼び出しが可能です。

    メソッド呼び出しが、指定されたスレッドで実行されます。メソッド呼び出しは、指定されたスレッドがイベントにより中断されている場合にだけ実行されます。ターゲット VM がフロントエンドにより中断されている場合には、メソッド呼び出しはサポートされません。

    指定されたメソッドは、指定された引数リスト内の引数を使って呼び出されます。メソッド呼び出しは同期的に行われます。 そのため、呼び出されたメソッドがターゲット VM 内で復帰するまで、応答パケットは送信されません。戻り値 (大抵の場合、void 値) は応答パケットに含まれます。呼び出されたメソッドが例外をスローする場合、例外オブジェクト ID が応答パケットに設定されます。 それ以外の場合、例外オブジェクト ID は null になります。

    プリミティブ引数の場合、引数値の型と引数の型は厳密に一致している必要があります。オブジェクト引数の場合、引数値の型から引数の型への広範な参照変換が存在し、かつ引数の型をロードする必要があります。

    デフォルトでは、ターゲット VM 内のすべてのスレッドがイベントまたはコマンドによって以前に中断された場合、それらはメソッドの呼び出し中に再開されます。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ブレークポイントまたは他のイベントが、呼び出し中に発生する可能性があります。ただし、この暗黙の再開動作が ThreadReference 再開コマンドの動作とほとんど同じであることに注意してください。 このため、スレッドの中断カウントが 1 を超えている場合、呼び出し中も中断状態のままになります。デフォルトでは、呼び出し前の状態が何であっても、ターゲット VM 内のすべてのスレッドは呼び出し完了時に中断します。

    options フィールドに INVOKE_SINGLE_THREADED ビットフラグを指定することにより、呼び出し中の他のスレッドの再開を防ぐことができます。 ただし、前述したデッドロックから保護したり、それを回復したりすることはできないため、オプションはよく注意して指定してください。指定されたスレッドだけが再開されます (前述したすべてのスレッドと同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドは再び中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。

    ターゲット VM が (たとえば、VirtualMachine 破棄コマンドを使って) 呼び出し中に切断されると、 メソッド呼び出しは続行されます。

    出力データ
    objectIDobjectオブジェクト ID
    threadIDthread呼び出しを実行するスレッド
    classIDclazzクラスの型
    methodIDmethod呼び出し先のメソッド
    intarguments引数の数
    arguments 回の繰り返し:
    valuearg引数の値
    intoptions呼び出しオプション
    応答データ
    valuereturnValue戻り値、または null (例外がスローされた場合)
    tagged-objectIDexceptionスローされた例外 (存在する場合)
    DisableCollection コマンド (7)
    指定されたオブジェクトのガベージコレクションが実行されるのを防ぎます。デフォルトでは、バックエンド応答内のすべてのオブジェクトは、VM が実行中であればいつでもガベージコレクト可能です。このコマンドを呼び出すと、オブジェクトがガベージコレクトされないことが保証されます。ガベージコレクションを再度有効にするには、EnableCollection コマンドを使用します。

    ターゲット VM の中断中は、すべてのスレッドが中断しているため、ガベージコレクションは行われません。中断中に変数、フィールドおよび配列の一般的な検査を実行する場合には、明示的にガベージコレクションを無効にしなくても安全です。

    このメソッドを使用すると、ターゲット VM 内のガベージコレクションのパターンを変更するため、アプリケーションの動作がデバッガ実行時とデバッガ非実行時とで異なる結果になる可能性があります。 そのため、このメソッドの使用には慎重を期してください。

    出力データ
    objectIDobjectオブジェクト ID
    応答データ
    (なし)
    EnableCollection コマンド (8)
    このオブジェクトのガベージコレクションを許可します。デフォルトでは、JDWP により返されるすべてのオブジェクトは、VM が実行中であればいつでもガベージコレクト可能です。このコマンドの呼び出しが必要になるのは、DisableCollection コマンドを使ってガベージコレクションを無効に設定した場合だけです。
    出力データ
    objectIDobjectオブジェクト ID
    応答データ
    (なし)
    IsCollected コマンド (9)
    オブジェクトが、ターゲット VM 内でガベージコレクトされたかどうかを判定します。
    出力データ
    objectIDobjectオブジェクト ID
    応答データ
    booleanisCollectedオブジェクトがガベージコレクトされた場合は true、そうでない場合は false

    StringReference コマンドセット (10)

    Value コマンド (1)
    文字列に含まれる文字を返します。
    出力データ
    objectIDstringObjectString オブジェクト ID
    応答データ
    stringstringValueString の値

    ThreadReference コマンドセット (11)

    Name コマンド (1)
    スレッド名を返します。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    stringthreadNameスレッド名
    Suspend コマンド (2)
    スレッドを中断します。

    java.lang.Thread.suspend() とは異なり、Virtual Machine と個別のスレッド両方の中断がカウントされます。スレッドの再実行前に、中断された回数と同数の再開が行われなければなりません。

    コマンドを使って単一のスレッドを中断することには、java.lang.Thread.suspend() の場合と同様の危険があります。中断されたスレッドが実行中の別のスレッドに必要なモニターを保持する場合、ターゲット VM でデッドロックが発生する可能性があります (少なくとも、中断されたスレッドが再開されるまで)。

    中断されたスレッドは、前述の JDI 再開メソッドの 1 つを使って再開されるまで中断状態を維持することが保証されます。 ターゲット VM 内のアプリケーションが、中断したスレッドを java.lang.Thread#resume を使って再開することはできません。

    これにより、スレッドの状態が変化することはない点に注意してください (ThreadStatus を参照)。たとえば、このスレッドが実行中だった場合、他のスレッドからも実行中に見えます。

    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    (なし)
    Resume コマンド (3)
    指定されたスレッドの実行を再開します。以前にこのスレッドがフロントエンドにより中断されたことがない場合には、このコマンドを呼び出しても効果はありません。それ以外の場合、このスレッド上で保留中の中断の数は減少します。数が 0 まで減少すると、スレッドは実行を継続します。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    (なし)
    Status コマンド (4)
    スレッドの現在のステータスを返します。スレッドのステータス応答は、最後の実行時のスレッドステータスを示します。中断ステータスは、スレッドの中断に関する情報 (存在する場合) を提供します。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    intthreadStatusスレッドステータスコードの 1 つ。JDWP.ThreadStatus を参照
    intsuspendStatusスレッドステータスコードの 1 つ。 JDWP.SuspendStatus を参照
    ThreadGroup コマンド (5)
    指定されたスレッドを含むスレッドグループを返します。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    threadGroupIDgroupこのスレッドのスレッドグループ   
    Frames コマンド (6)
    中断したスレッドの現在の呼び出しスタックを返します。フレームシーケンスは、現在実行中のフレームから始まり、その呼び出し元、他のフレームと続きます。スレッドは中断していなければならず、返される frameID はスレッドが中断している間だけ有効です。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    intstartFrame取得する最初のフレームのインデックス
    intlength取得するフレームのカウント (-1 は残りすべてを意味します)    
    応答データ
    intframes取得されたフレーム数
    frames 回の繰り返し:
    frameIDframeIDこのフレームの ID    
    locationlocationこのフレームの現在位置
    FrameCount コマンド (7)
    このスレッドスタックのフレームカウントを返します。スレッドは中断していなければならず、返されるカウントはスレッドが中断している間だけ有効です。中断していない場合、JDWP.Error.errorThreadNotSuspended を返します。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    intframeCountこのスレッドスタックのフレームカウント    
    OwnedMonitors コマンド (8)
    このスレッドによりモニターが入力されたオブジェクトを返します。スレッドは中断していなければならず、返される情報はスレッドが中断している間だけ有効です。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    intowned所有するモニターの数
    owned 回の繰り返し:
    tagged-objectIDmonitor所有されるモニター
    CurrentContendedMonitor コマンド (9)
    このスレッドがモニターエントリを待機中の、または java.lang.Object.wait を使って待機中のオブジェクトを返します (存在する場合)。スレッドは中断していなければならず、返される情報はスレッドが中断している間だけ有効です。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    tagged-objectIDmonitor競合するモニター、または null (現在競合するモニターが存在しない場合)    
    Stop コマンド (10)
    非同期例外をスローしてスレッドを停止します (java.lang.Thread.stop を使用した場合と同様)。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    objectIDthrowable非同期な例外。このオブジェクトは、java.lang.Throwable のインスタンスまたはサブクラスでなければなりません。
    応答データ
    (なし)
    Interrupt コマンド (11)
    スレッドに対し割り込みを実行します (java.lang.Thread.interrupt を実行した場合と同様)。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    (なし)
    SuspendCount コマンド (12)
    このスレッドの中断カウントを取得します。中断カウントは、スレッドレベルまたは VM レベルの中断コマンドによりスレッドが (対応する再開なしで) 中断された回数です。
    出力データ
    threadIDthreadObjectスレッドオブジェクト ID
    応答データ
    intsuspendCountこのスレッドの未処理の中断回数    

    ThreadGroupReference コマンドセット (12)

    Name コマンド (1)
    スレッドグループ名を返します。
    出力データ
    threadGroupIDgroupスレッドグループオブジェクト ID
    応答データ
    stringgroupNameスレッドグループの名前
    Parent コマンド (2)
    指定されたスレッドグループを含むスレッドグループ (存在する場合) を返します。
    出力データ
    threadGroupIDgroupスレッドグループオブジェクト ID
    応答データ
    threadGroupIDparentGroup親スレッドグループオブジェクト、または null (指定されたスレッドグループがトップレベルのスレッドグループの場合)
    Children コマンド (3)
    このスレッドグループに直接含まれるスレッドおよびスレッドグループを返します。子スレッドグループ内のスレッドおよびスレッドグループは、含まれません。
    出力データ
    threadGroupIDgroupスレッドグループオブジェクト ID
    応答データ
    intchildThreads子スレッドの数    
    childThreads 回の繰り返し:
    threadIDchildThread直接の子スレッド ID
    intchildGroups子スレッドグループの数    
    childGroups 回の繰り返し:
    threadGroupIDchildGroup直接の子スレッドグループ ID

    ArrayReference コマンドセット (13)

    Length コマンド (1)
    指定された配列内のコンポーネントの数を返します。
    出力データ
    arrayIDarrayObject配列オブジェクト ID
    応答データ
    intarrayLength配列の長さ
    GetValues コマンド (2)
    配列コンポーネントの範囲を返します。指定された範囲は、配列境界内にある必要があります。
    出力データ
    arrayIDarrayObject配列オブジェクト ID
    intfirstIndex取得対象の最初のインデックス
    intlength取得するコンポーネントの数
    応答データ
    arrayregionvalues取得した値。値がオブジェクトの場合、タグ付けされた値になります。 それ以外の場合は、タグ付けされていない値になります。
    SetValues コマンド (3)
    配列コンポーネントの範囲を設定します。指定された範囲は、配列境界内にある必要があります。プリミティブ値の場合、各値の型と配列コンポーネントの型は正確に一致している必要があります。オブジェクト値の場合、値型から配列コンポーネント型への広範な参照変換が存在し、かつ配列コンポーネント型がロードされている必要があります。
    出力データ
    arrayIDarrayObject配列オブジェクト ID
    intfirstIndex設定対象の最初のインデックス
    intvalues設定する値の数    
    values 回の繰り返し:
    untagged-valuevalue設定する値    
    応答データ
    (なし)

    ClassLoaderReference コマンドセット (14)

    VisibleClasses コマンド (1)
    このクラスローダに対してロードするよう要求されたすべてのクラスのリストを返します。このクラスローダは、返されたリスト内の各クラスの起動クラスローダと見なされます。このリストには、このローダにより定義された各参照型、およびこのクラスローダにより別のクラスローダへ委譲されたロードのすべての型が含まれます。

    可視クラスリストは、型ネームスペースに関する有用なプロパティを保持します。特定の型ネームスペースは、リスト中で最高 1 回現れます。このクラスローダにより定義されたクラスの型名を使って宣言された各フィールドまたは変数は、その単一型で解釈処理される必要があります。

    返されるリストの順番は保証されません。

    出力データ
    classLoaderIDclassLoaderObjectクラスローダのオブジェクト ID
    応答データ
    intclasses可視クラスの番号    
    classes 回の繰り返し:
    byterefTypeTag続く参照型の種類    
    referenceTypeIDtypeIDこのクラスローダに対する可視クラス

    EventRequest コマンドセット (15)

    Set コマンド (1)
    イベント要求を設定します。この要求で指定されたイベントの発生時に、ターゲット VM からイベント が送信されます。
    出力データ
    byteeventKind要求するイベントの種類。要求可能なイベントリストの詳細は、JDWP.EventKind を参照してください。  
    bytesuspendPolicyこのイベントの発生時に中断するスレッド。イベント順序およびコマンド応答は、スレッドが中断および再開する順序を正確に反映することに留意してください。たとえば、VM を中断するイベントの発生前に、VM 全体の再開が処理される場合、再開コマンドへの応答は、中断イベントより前にトランスポートに書き込まれます。
    intmodifiers生成されるイベント数の制御に使用される制約。修飾子は、イベントがイベントキューに配置される前に指定する必要のある追加テストを指定します。このコレクションで指定された順序で各修飾子をイベントに適用することにより、イベントはフィルタ処理されます。 すべての修飾子を満たすイベントのみがレポートされます。

    ターゲット VM からデバッガ VM に送信されるイベントトラフィックの量を減らすことにより、フィルタ処理でデバッガのパフォーマンスを劇的に向上させることが可能です。  

    modifiers 回の繰り返し:
    bytemodKind修飾子の種類
    Case Count - modKind が 1 の場合: 要求されたイベントのレポートを、指定された回数後、最高 1 回に制限します。このフィルタが最初に count - 1 回処理された時点では、イベントはレポートされません。1 回限りのイベントを要求する場合は、このメソッドをカウント 1 で呼び出します。

    カウントが 0 に達すると、この要求内の続くフィルタすべてが適用されます。これらのフィルタのいずれもイベントを抑制しない場合、そのイベントはレポートされます。それ以外の場合、イベントはレポートされません。どちらの場合にも、この要求では続くイベントは決してレポートされることはありません。この修飾子は、あらゆる種類のイベントに使用可能です。

    intcountイベント前のカウント。1 回限りのイベントで使用します。
    Case Conditional - modKind が 2 の場合: 式の条件節
    intexprID将来での使用のため予約されています。
    Case ThreadOnly - modKind が 3 の場合: レポートされたイベントを、指定されたスレッド内に制限します。この修飾子は、クラスの読み込み解除を除く、あらゆる種類のイベントに使用可能です。  
    threadIDthread要求されたスレッド
    Case ClassOnly - modKind が 4 の場合: クラス準備イベントの場合に、この要求で生成されたイベントを制限して、指定された参照型および任意のサブタイプの準備となるようにします。他のイベントの場合、この要求で生成されるイベントが、指定された参照型またはその任意のサブタイプ内に位置するように制限します。イベントは、指定された参照型に安全にキャスト可能な参照型内の任意の位置で生成されます。この修飾子は、クラスの読み込み解除、スレッド開始、およびスレッド終了を除く、すべての種類のイベントで使用可能です。  
    referenceTypeIDclazz要求されたクラス
    Case ClassMatch - modKind が 5 の場合: レポート対象のイベントを、指定された制限付き正規表現に一致する名前を持つクラスのイベントに制限します。クラス準備イベントの場合、準備されたクラス名が一致します。クラスの読み込み解除イベントの場合、読み込み解除されたクラス名が一致します。他のイベントでは、イベント位置のクラス名が一致します。この修飾子は、スレッド開始およびスレッド終了を除く、すべての種類のイベントで使用可能です。  
    stringclassPattern要求されたクラスパターン。マッチングは、指定されたクラスパターンに正確に一致する場合、およびパターンが「*」で始まるまたは終わる場合 (例、「*.Foo」、「java.*」) だけに制限されます。  
    Case ClassExclude - modKind が 6 の場合: レポート対象のイベントを、指定された制限付き正規表現に名前が一致しないクラスのイベントに制限します。クラス準備イベントの場合、準備されたクラス名が一致します。クラスの読み込み解除イベントの場合、読み込み解除されたクラス名が一致します。他のイベントでは、イベント位置のクラス名が一致します。この修飾子は、スレッド開始およびスレッド終了を除く、すべての種類のイベントで使用可能です。  
    stringclassPattern許可されないクラスパターン。マッチングは、指定されたクラスパターンに正確に一致する場合、およびパターンが「*」で始まるまたは終わる場合 (例、「*.Foo」、「java.*」) だけに制限されます。  
    Case LocationOnly - modKind が 7 の場合: レポート対象のイベントを、指定された場所で発生するイベントに制限します。この修飾子は、ブレークポイント、フィールドアクセス、フィールド変更、ステップ、および例外イベントと共に使用可能です。  
    locationloc要求される場所
    Case ExceptionOnly - modKind が 8 の場合: レポート対象の例外を、クラスおよびそれがキャッチされるかどうかを基準に制限します。この修飾子は、例外イベントでのみ使用可能です。  
    referenceTypeIDexceptionOrNullレポート対象の例外。null (0) は、全種類の例外をレポートすることを意味します。null 以外の場合、レポートされる例外イベントを、指定された型またはその任意のサブタイプに制限します。  
    booleancaughtキャッチされた例外をレポートします。
    booleanuncaughtキャッチされなかった例外をレポートします。例外がスローされた時点で、例外がキャッチされたかどうかを常に判断できるわけではありません。詳細は、複合イベントの例外イベントのキャッチ位置に関する説明を参照してください。  
    Case FieldOnly - modKind が 9 の場合: レポート対象のイベントを、指定されたフィールドで発生するイベントに制限します。この修飾子は、フィールドアクセスおよびフィールド変更イベントでのみ使用可能です。  
    referenceTypeIDdeclaringフィールドが宣言される型
    fieldIDfieldID要求されるフィールド
    Case Step - modKind が 10 の場合: レポート対象のステップイベントを、深さおよびサイズの制限を満たすものだけに制限します。この修飾子は、ステップイベントでのみ使用可能です。  
    threadIDthreadステップ実行を行うスレッド
    intsize各ステップのサイズ。JDWP.StepSize を参照してください。
    intdepthスタック制限の相対呼び出し。JDWP.StepDepth を参照してください。
    応答データ
    intrequestID作成された要求の ID
    Clear コマンド (2)
    イベント要求を解除します。
    出力データ
    byteevent解除するイベントタイプ
    intrequestID解除する要求の ID
    応答データ
    (なし)
    ClearAllBreakpoints コマンド (3)
    設定されたブレークポイントをすべて削除します。
    出力データ
    (なし)
    応答データ
    (なし)

    StackFrame コマンドセット (16)

    GetValues コマンド (1)
    指定されたフレーム内の 1 つまたは複数のローカル変数の値を返します。各変数は、フレームのコードインデックスで可視である必要があります。ローカル変数情報が利用できなくても、フロントエンドが正しいローカル変数インデックスを判別できるなら、値の取得は可能です。一般に、ローカル変数テーブルの情報にアクセスしなくても、メソッドシグニチャーからメソッド引数のインデックスを判定できます。
    出力データ
    threadIDthreadObjectフレームのスレッド    
    frameIDframeフレーム ID
    intslots取得する値の数    
    slots 回の繰り返し:
    intslotフレーム内に存在する局所変数のインデックス    
    bytesigbyte変数の型を識別するタグ
    応答データ
    intvalues取得する値の数    
    values 回の繰り返し:
    valueslotValueローカル変数の値    
    SetValues コマンド (2)
    1 つまたは複数のローカル変数の値を設定します。各変数は、現在のフレームコードインデックスで可視である必要があります。プリミティブ値の場合、値の型と変数の型は正確に一致している必要があります。オブジェクト値の場合、値の型から変数の型への広範な参照変換が存在し、かつ変数の型がロードされている必要があります。

    ローカル変数情報を利用できない場合でも、フロントエンドが正しいローカル変数インデックスを判別できるなら、値の設定は可能です。一般に、ローカル変数テーブルの情報にアクセスしなくても、メソッドシグニチャーからメソッド引数のインデックスを判定できます。

    出力データ
    threadIDthreadObjectフレームのスレッド    
    frameIDframeフレーム ID
    intslotValues設定する値の数    
    slotValues 回の繰り返し:
    intslotフレーム ID
    valueslotValue設定する値    
    応答データ
    (なし)
    ThisObject コマンド (3)
    このフレームに対する 'this' 参照の値を返します。フレームのメソッドが static または native の場合、応答には null オブジェクト参照が含まれます。
    出力データ
    threadIDthreadObjectフレームのスレッド    
    frameIDframeフレーム ID
    応答データ
    tagged-objectIDobjectThisこのフレームに対する 'this' オブジェクト    

    ClassObjectReference コマンドセット (17)

    ReflectedType コマンド (1)
    このクラスオブジェクトを反映した参照型を返します。
    出力データ
    classObjectIDclassObjectクラスオブジェクト    
    応答データ
    byterefTypeTag続く参照型の種類    
    referenceTypeIDtypeIDリフレクトされた参照型

    Event コマンドセット (64)

    Composite コマンド (100)
    いくつかのイベントが、指定された時刻にターゲット VM で発生します。たとえば、指定された場所に対する複数のブレークポイント要求が存在するか、同じ場所でブレークポイント要求としてステップ実行を行う場合を考えます。これらのイベントは、複合イベントとしてまとめて配信されます。一貫性を保つため、レポートするイベントが 1 つだけであっても、イベントの配信には常に複合イベントが使用されます。

    複合イベントとしてグループ化されるイベントには、次の方法で制限が課されます。

    イベントデータ
    bytesuspendPolicyこの複合イベントにより中断されたスレッド
    inteventsセット内のイベント
    events 回の繰り返し:
    byteeventKindイベントの種類のセレクタ
    Case VMStart - eventKind が JDWP.EventKind.VM_START の場合: ターゲット VM の初期化通知。メインスレッドの開始前およびアプリケーションコードの実行前に、このイベントは受け取られます。このイベントが発生する前に、大量のシステムコードが実行され、多数のシステムクラスがロードされます。このイベントは、明示的に要求されていなくても、常にターゲット VM により生成されます。
    intrequestID生成されたイベントの要求 (イベントが自動的に生成された場合は 0)
    threadIDthread初期スレッド
    Case VMStart - eventKind が JDWP.EventKind.SINGLE_STEP の場合: ターゲット VM のステップ完了通知。その場所でコードが実行される前に、ステップイベントが生成されます。  
    intrequestID生成されたイベントの要求
    threadIDthreadステップ実行の行われたスレッド
    locationlocationステップ実行の行われた場所
    Case Breakpoint - eventKind が JDWP.EventKind.BREAKPOINT の場合: ターゲット VM のブレークポイント通知。その場所でコードが実行される前に、ブレークポイントイベントが生成されます。  
    intrequestID生成されたイベントの要求
    threadIDthreadブレークポイントをヒットしたスレッド
    locationlocationヒットした場所
    Case MethodEntry - eventKind が JDWP.EventKind.METHOD_ENTRY の場合: ターゲット VM のメソッド呼び出し通知。このイベントは、呼び出されたメソッド内のコードが実行される前に生成されます。メソッドに入るイベントは、ネイティブおよび非ネイティブのメソッドの両方で生成されます。

    いくつかの VM では、メソッドがスレッドの初期化の一部として呼び出される場合、特定のスレッドのスレッド開始イベントが発生する前に、そのスレッド用のメソッドに入るイベントが発生することがあります。  

    intrequestID生成されたイベントの要求
    threadIDthreadメソッドに入ったスレッド
    locationlocationエントリの位置
    Case MethodExit - eventKind が JDWP.EventKind.METHOD_EXIT の場合: ターゲット VM のメソッド復帰通知。このイベントは、メソッド内のすべてのコードが実行された後で生成されます。 ただし、このイベントの位置は、メソッド内で最後に実行された位置になります。メソッド終了イベントは、ネイティブおよび非ネイティブのメソッドの両方で生成されます。メソッドが例外をスローして終了する場合には、メソッド終了イベントは生成されません。  
    intrequestID生成されたイベントの要求
    threadIDthreadメソッドから出たスレッド
    locationlocation終了位置
    Case Exception - eventKind が JDWP.EventKind.EXCEPTION の場合: ターゲット VM の例外通知。例外が非ネイティブメソッドからスローされる場合、例外イベントは例外がスローされた位置で生成されます。例外がネイティブメソッドからスローされる場合、例外スロー後の最初の非ネイティブ位置で例外イベントは生成されます。
    intrequestID生成されたイベントの要求
    threadIDthread例外付きのスレッド
    locationlocation例外がスローされる場所 (またはネイティブメソッドからスローされる場合には、スロー後の最初の非ネイティブの位置)
    tagged-objectIDexceptionスローされた例外
    locationcatchLocationキャッチした場所、または 0 (キャッチしない場合)。スローの時点で、現在の位置が例外を処理する try 文で動的に囲まれる場合、例外はキャッチされたと見なされます。詳細は、JVM 仕様を参照してください。その種の try 文が存在する場合には、キャッチ位置は適切な catch 節内の最初の位置になります。

    実行時に呼び出しスタック内のネイティブメソッドが存在する場合、返されるキャッチ位置について重要な制約があることに留意してください。そのような場合、呼び出しスタック上のネイティブメソッドにより例外が処理されるかどうかを予測することは不可能です。そのため、ここでキャッチされないと見なされた例外を、ネイティブメソッドが処理し、ターゲット VM を終了させないことが可能です。さらに、ここで返されたキャッチ位置には、スレッドをスローして到達できると見なすことはできません。一方、現在位置とキャッチ位置との間にネイティブフレームが存在する場合には、ネイティブメソッド内で例外を処理およびクリアできます。

    ソースコード内に try-catch ブロックが明示されていない場合には、コンパイラは try-catch ブロックを生成できることに留意してください。たとえば、synchronized および finally ブロック用に生成されたコードには、暗黙の try-catch ブロックを含めることができます。スロー時にその種の暗黙的に生成された try-catch ブロックがコールスタック上に存在する場合は、ソースコード上では例外はキャッチされないように見えるとしても、例外はキャッチされると見なされます。  

    Case ThreadStart - eventKind が JDWP.EventKind.THREAD_START の場合: ターゲット VM で新規実行中のスレッド通知。新規スレッドは、java.lang.Thread.start への呼び出しの結果、または JNI を使って VM へ新規スレッドを接続した結果である場合があります。通知は、新規スレッドにより、その実行開始前に生成されます。このタイミングのため、このイベントが受信される前に、スレッド用の他のイベントを受信することが可能です。特に、メソッドに入るイベントおよびメソッドから出るイベントは、スレッド初期化中に発生する場合があります。VirtualMachine AllThreads コマンドが、スレッドを、そのスレッド開始イベントの受信前に返すことも可能になります。

    このイベントは、スレッドオブジェクト (デバッグ対象の VM によってはずっと以前に発生したかもしれない) の作成に関する情報を提供しません。  

    intrequestID生成されたイベントの要求
    threadIDthread開始したスレッド
    Case ThreadDeath - eventKind が JDWP.EventKind.THREAD_DEATH の場合: ターゲット VM の完了スレッド通知。通知は、終了しつつあるスレッドにより終了前に生成されます。このタイミングのため、VirtualMachine.allThreads は、このイベントの受信後に、このスレッドを返すことができます。

    このイベントは、スレッドオブジェクトの寿命に関する情報を提供しないことに留意してください。それは、ターゲット VM に存在する参照に基づいて、すぐにコレクトされる場合もされない場合もあります。  

    intrequestID生成されたイベントの要求
    threadIDthread終了するスレッド
    Case ClassPrepare - eventKind が JDWP.EventKind.CLASS_PREPARE の場合: ターゲット VM のクラス準備通知。クラス準備の定義については、JVM 仕様を参照してください。プリミティブクラス (例、java.lang.Integer.TYPE) の場合、クラス準備イベントは生成されません。  
    intrequestID生成されたイベントの要求
    threadIDthread準備中のスレッド。まれに、ターゲット VM 内のデバッガシステムスレッド内でこのイベントが発生することがあります。デバッガスレッドはこれらのイベントの発生を防ぐための予防措置を講じますが、ある状況下、特に java.lang.Error のいくつかのサブクラスでは避けることができません。イベントがデバッガシステムスレッドにより生成される場合、このメソッドが返す値は null になります。 また、イベントの要求された中断ポリシーが EVENT_THREAD の場合、すべてのスレッドが代わりに中断し、複合イベントの中断ポリシーがこの変更をリフレクトします。

    前述の内容は、ターゲット VM により通常の (非デバッグ) 操作中に作成されたシステムスレッドには当てはまりません。  

    byterefTypeTag参照型の種類。JDWP.TypeTag を参照してください。
    referenceTypeIDtypeID準備中の型
    stringsignature型のシグニチャー
    intstatus型のステータス。JDWP.ClassStatus を参照してください。
    Case ClassUnload - eventKind が JDWP.EventKind.CLASS_UNLOAD の場合: ターゲット VM 内のクラスの読み込み解除通知。

    ガベージコレクションの実行中には、デバッガバックエンドに厳しい制約が存在します。 このため、読み込み解除情報は大幅に制限されます。  

    intrequestID生成されたイベントの要求
    stringsignature型のシグニチャー
    Case FieldAccess - eventKind が JDWP.EventKind.FIELD_ACCESS の場合: ターゲット VM のフィールドアクセス通知。フィールドの変更は、フィールドアクセスとは見なされません。  
    intrequestID生成されたイベントの要求
    threadIDthreadアクセス中のスレッド
    locationlocationアクセスの位置
    byterefTypeTag参照型の種類。JDWP.TypeTag を参照してください。
    referenceTypeIDtypeIDフィールドの型
    fieldIDfieldIDアクセス対象のフィールド
    tagged-objectIDobjectアクセス対象のオブジェクト (static の場合は null=0)
    Case FieldModification - eventKind が JDWP.EventKind.FIELD_MODIFICATION の場合: ターゲット VM のフィールド変更通知    
    intrequestID生成されたイベントの要求
    threadIDthread変更中のスレッド
    locationlocation変更位置
    byterefTypeTag参照型の種類。JDWP.TypeTag を参照してください。
    referenceTypeIDtypeIDフィールドの型
    fieldIDfieldID変更対象のフィールド
    tagged-objectIDobject変更対象のオブジェクト (static の場合は null=0)
    valuevalueToBe割り当てられる値
    Case VMDeath - eventKind が JDWP.EventKind.VM_DEATH の場合:  
    intrequestID生成されたイベントの要求 (常に 0)

    Error 定数

    INVALID_TAG500オブジェクト型 ID またはクラスタグ
    ALREADY_INVOKING502以前の呼び出しが未完了
    INVALID_INDEX503  
    INVALID_LENGTH504  
    INVALID_STRING506  
    INVALID_CLASS_LOADER507  
    INVALID_ARRAY508  
    TRANSPORT_LOAD509  
    TRANSPORT_INIT510  
    NATIVE_METHOD511  
    INVALID_COUNT512  
    NONE0  
    INVALID_THREAD10  
    INVALID_THREAD_GROUP11  
    INVALID_PRIORITY12  
    THREAD_NOT_SUSPENDED13  
    THREAD_SUSPENDED14  
    INVALID_OBJECT20  
    INVALID_CLASS21  
    CLASS_NOT_PREPARED22  
    INVALID_METHODID23  
    INVALID_LOCATION24  
    INVALID_FIELDID25  
    INVALID_FRAMEID30  
    NO_MORE_FRAMES31  
    OPAQUE_FRAME32  
    NOT_CURRENT_FRAME33  
    TYPE_MISMATCH34  
    INVALID_SLOT35  
    DUPLICATE40  
    NOT_FOUND41  
    INVALID_MONITOR50  
    NOT_MONITOR_OWNER51  
    INTERRUPT52  
    INVALID_CLASS_FORMAT60  
    CIRCULAR_CLASS_DEFINITION61  
    FAILS_VERIFICATION62  
    ADD_METHOD_NOT_IMPLEMENTED63  
    SCHEMA_CHANGE_NOT_IMPLEMENTED64  
    INVALID_TYPESTATE65  
    NOT_IMPLEMENTED99  
    NULL_POINTER100  
    ABSENT_INFORMATION101  
    INVALID_EVENT_TYPE102  
    ILLEGAL_ARGUMENT103  
    OUT_OF_MEMORY110  
    ACCESS_DENIED111  
    VM_DEAD112  
    INTERNAL113  
    UNATTACHED_THREAD115  

    EventKind 定数

    VM_DISCONNECTED100JDWP を越えて送信されることはありません。
    VM_STARTJDWP.EventKind.VM_INIT  
    THREAD_DEATHJDWP.EventKind.THREAD_END  
    SINGLE_STEP1  
    BREAKPOINT2  
    FRAME_POP3  
    EXCEPTION4  
    USER_DEFINED5  
    THREAD_START6  
    THREAD_END7  
    CLASS_PREPARE8  
    CLASS_UNLOAD9  
    CLASS_LOAD10  
    FIELD_ACCESS20  
    FIELD_MODIFICATION21  
    EXCEPTION_CATCH30  
    METHOD_ENTRY40  
    METHOD_EXIT41  
    VM_INIT90  
    VM_DEATH99  

    ThreadStatus 定数

    ZOMBIE0  
    RUNNING1  
    SLEEPING2  
    MONITOR3  
    WAIT4  

    SuspendStatus 定数

    SUSPEND_STATUS_SUSPENDED0x1  

    ClassStatus 定数

    VERIFIED1  
    PREPARED2  
    INITIALIZED4  
    ERROR8  

    TypeTag 定数

    CLASS1ReferenceType はクラスです。  
    INTERFACE2ReferenceType はインタフェースです。  
    ARRAY3ReferenceType は配列です。  

    Tag 定数

    ARRAY91'[' - 配列オブジェクト (objectID サイズ)    
    BYTE66'B' - バイト値 (1 バイト)    
    CHAR67'C' - 文字値 (2 バイト)    
    OBJECT76'L' - オブジェクト (objectID サイズ)    
    FLOAT70'F' - 浮動値 (4 バイト)    
    DOUBLE68'D' - 倍精度値 (8 バイト)    
    INT73'I' - 整数値 (4 バイト)    
    LONG74'J' - ロング値 (8 バイト)    
    SHORT83'S' -ショート値 (2 バイト)    
    VOID86'V' - void 値 (バイトなし)    
    BOOLEAN90'Z' - ブール値 (1 バイト)    
    STRING115's' - String オブジェクト (objectID サイズ)    
    THREAD116't' - Thread オブジェクト (objectID サイズ)    
    THREAD_GROUP103'g' - ThreadGroup オブジェクト (objectID サイズ)    
    CLASS_LOADER108'l' - ClassLoader オブジェクト (objectID サイズ)    
    CLASS_OBJECT99'c' - クラスオブジェクト (objectID サイズ)    

    StepDepth 定数

    INTO0ステップの終了前に発生する任意のメソッド呼び出しを開始します。  
    OVER1ステップの終了前に発生する任意のメソッド呼び出しに進みます。  
    OUT2現在のメソッドから出ます。  

    StepSize 定数

    MIN0最小限のステップ (多くの場合、バイトコード命令)    
    LINE1次のソース行へのステップ    

    SuspendPolicy 定数

    NONE0このイベントの遭遇時にスレッドを中断しません。  
    EVENT_THREAD1このイベントの遭遇時にイベントスレッドを中断します。  
    ALL2このイベントの遭遇時にすべてのスレッドを中断します。  

    InvokeOptions 定数

    INVOKE_SINGLE_THREADED0x01それ以外の場合、開始したすべてのスレッド    
    INVOKE_NONVIRTUAL0x02それ以外の場合、通常の仮想呼び出し (インスタンスメソッドのみ)


    Copyright © 1997-1999 Sun Microsystems, Inc. All Rights Reserved.

    コメントの送付先: java-debugger@java.sun.com

    Sun