InvokeOptions 定数
ターゲットの VM により実装された JDWP のバージョンを返します。バージョン文字列の書式は、実装に依存します。
- 出力データ
- (なし)
- 応答データ
| | | | | |
|
string | description | VM バージョンのテキスト情報
|
int | jdwpMajor | JDWP のメジャーバージョン番号
|
int | jdwpMinor | JDWP のマイナーバージョン番号
|
string | vmVersion | ターゲット VM の JRE バージョン (java.version プロパティなどで使用)
|
string | vmName | ターゲット VM 名 (java.vm.name プロパティなどで使用)
|
指定されたシグニチャーと一致するターゲット VM によりロードされたクラスすべての参照型を返します。複数のクラスローダが同名のクラスをロードしている場合、複数の参照型が返されます。検索は、ロードされたクラスだけに制限されます。 特定のシグニチャーを持つクラスのロードは行われません。
- 出力データ
| | | | | |
|
string | signature | 検索対象のクラスの JNI シグニチャー (例、"Ljava/lang/String;")
|
- 応答データ
| | | | | |
|
int | classes | 全参照型の数
|
classes 回の繰り返し:
|
| byte | refTypeTag | 続く参照型の種類
|
| referenceTypeID | typeID | 対応するロードされた参照型
|
| int | status | 現在のクラスのステータス
|
ターゲット VM が現在ロードしているクラスすべての参照型を返します。
- 出力データ
- (なし)
- 応答データ
| | | | | |
|
int | classes | 全参照型の数
|
classes 回の繰り返し:
|
| byte | refTypeTag | 続く参照型の種類
|
| referenceTypeID | typeID | ロードされた参照型
|
| string | signature | ロードされた参照型の JNI シグニチャー
|
| int | status | 現在のクラスのステータス
|
ターゲット VM で実行中のすべてのスレッドを返します。返されるリストには、java.lang.Thread により作成されるスレッド、JNI 経由でターゲット VM に接続するすべてのネイティブスレッド、およびターゲット VM により作成されるシステムスレッドが含まれます。開始されていないスレッドおよび実行の完了したスレッドは、リストには含まれません。
- 出力データ
- (なし)
- 応答データ
| | | | | |
|
int | threads | 全スレッドの数
|
threads 回の繰り返し:
|
| threadID | thread | 実行中のスレッド
|
親を持たないスレッドグループすべてを返します。このコマンドは、既存のスレッドグループの (1 つまたは複数の) ツリーを構築する最初の手順で使用されることがあります。
- 出力データ
- (なし)
- 応答データ
| | | | | |
|
int | groups | 全スレッドグループの数
|
groups 回の繰り返し:
|
| threadGroupID | group | トップレベルのスレッドグループ
|
この Virtual Machine のミラーを無効にします。ターゲット VM への通信チャネルは閉じられ、ターゲット VM はこのデバッガまたは別のデバッガからの次の接続を受け付ける準備を行います。- 以下のタスクが含まれます。
- すべてのイベント要求は取り消されます。 スレッドレベルの resume コマンドまたは VM レベルの resume コマンドにより中断されたすべてのスレッドが、実行に必要な回数だけ再開されます。
- ガベージコレクションが無効にされたすべての状況で、再度有効にされます。
ターゲット VM で実行中のすべてのメソッド呼び出しの実行は、切断後も継続されます。この種のメソッド呼び出しが完了すると、呼び出し元のスレッドは、停止した場所から実行を継続します。この VirtualMachine (ObjectReferences、ReferenceTypes など) を起源とするリソースは、無効になります。
- 出力データ
- (なし)
- 応答データ
- (なし)
ターゲット VM 内に存在する可変サイズのデータ型のサイズを返します。戻り値は、識別子がコマンドおよび応答パケットで使用するバイト数を示します。
- 出力データ
- (なし)
- 応答データ
| | | | | |
|
int | fieldIDSize | fieldID のサイズ (バイト単位)
|
int | methodIDSize | methodID のサイズ (バイト単位)
|
int | objectIDSize | objectID のサイズ (バイト単位)
|
int | referenceTypeIDSize | referenceTypeID のサイズ (バイト単位)
|
int | frameIDSize | frameID のサイズ (バイト単位)
|
ターゲット VM で稼動中のアプリケーションの実行を中断します。現在実行中の Java スレッドは、すべて中断されます。java.lang.Thread.suspend とは異なり、Virtual Machine と個別のスレッド両方の中断がカウントされます。スレッドを再び実行する前に、VMレベルの resume コマンドまたはスレッドレベルの resume コマンドを使って、中断の実行回数と同じ数だけ再開を実行する必要があります。
- 出力データ
- (なし)
- 応答データ
- (なし)
suspend コマンドの実行後またはイベントの停止後に、アプリケーションの実行を再開します。Virtual Machine および個別のスレッドの中断は、カウントされます。特定のスレッドの中断回数が n 回の場合、そのスレッドを続行する前に n 回再開する必要があります。
- 出力データ
- (なし)
- 応答データ
- (なし)
指定された終了コードでターゲット VM を終了させます。以前にターゲット VM から返された ID すべては、無効になります。VM で実行中のスレッドは、不意に停止します。スレッド終了例外はスローされないため、最終的にブロックは実行されません。
- 出力データ
-
- 応答データ
- (なし)
ターゲット VM 内に文字列オブジェクトを新規作成し、その ID を返します。
- 出力データ
| | | | | |
|
string | utf | 作成された文字列内で使用する UTF-8 形式の文字
|
- 応答データ
| | | | | |
|
stringID | stringObject | 作成された文字列 (java.lang.String のインスタンス)
|
VM の機能を取得します。各機能は、boolean 型で返され、ある機能が存在するかどうかを示します。各機能に関連するコマンドは、その機能が利用できない場合、NOT_IMPLEMENTED エラーを返します。
- 出力データ
- (なし)
- 応答データ
| | | | | |
|
boolean | canWatchFieldModification | VM がフィールドの変更を監視して、変更ウォッチポイントイベントを送信可能かどうか
|
boolean | canWatchFieldAccess | VM がフィールドへのアクセスを監視して、アクセスウォッチポイントイベントを送信可能かどうか
|
boolean | canGetBytecodes | VM が、指定されたメソッドのバイトコードを取得可能かどうか
|
boolean | canGetSyntheticAttribute | フィールドまたはメソッドが合成である場合、VM がそれを判定可能かどうか (つまり、メソッドまたはフィールドがコンパイラにより生成された場合、VM がそれを判定可能かどうか)
|
boolean | canGetOwnedMonitorInfo | 所有されたスレッドのモニター情報を、VM が取得可能かどうか
|
boolean | canGetCurrentContendedMonitor | 現在競合しているスレッドのモニターを、VM が取得可能かどうか
|
boolean | canGetMonitorInfo | 指定されたオブジェクトのモニター情報を、VM が取得可能かどうか
|
ターゲット VM の classpath および bootclasspath を取得します。classpath が未定義の場合、空リストを返します。bootclasspath が未定義の場合、空リストを返します。
- 出力データ
- (なし)
- 応答データ
| | | | | |
|
string | baseDir | 次のリスト内のいずれかの相対パス解決で使用されるベースディレクトリ
|
int | classpaths | classpath 内のパスの数
|
classpaths 回の繰り返し:
|
| string | path | classpath の 1 コンポーネント
|
int | bootclasspaths | bootclasspath 内のパスの数
|
bootclasspaths 回の繰り返し:
|
| string | path | bootclasspath の 1 コンポーネント
|
オブジェクト ID のリストを解放します。リスト内の各オブジェクトに対して、以下の内容が適用されます。リスト内のオブジェクト ID を使って、コマンドがこれ以上送信されることはありません。オブジェクトがまだガベージコレクトされていない場合、ID に関連付けられたすべてのバックエンドリソースが解放されます。 オブジェクトのガベージコレクションが無効な場合は、再度有効化されます。このコマンドの使用は、必須ではありません。このコマンドが送信されない場合、各 ID に関連付けられたリソースは、対応するオブジェクトのガベージコレクション実行後、バックエンドにより解放されます。このコマンドのもっとも効果的な利用法は、大量のオブジェクト (大規模な配列など) がバックエンドから取得されているが、すぐにはガベージコレクションが行われない場合に、バックエンドの負荷を軽減することです。
このコマンドを使ってオブジェクト ID の破棄が行われたあとで、オブジェクト ID がバックエンドにより再利用されることがあります。
- 出力データ
| | | | | |
|
int | requests | 全オブジェクト破棄要求の数
|
requests 回の繰り返し:
|
| objectID | object | オブジェクト ID
|
| int | refCnt | このオブジェクト ID がバックエンドから受け取ったパケットの一部となった回数。オブジェクト ID が着信するパケットの一部で、かつフロントエンドにより処理されていない場合、正確なカウントは、オブジェクト ID がバックエンドで解放されることを防ぎます。
|
- 応答データ
- (なし)
ターゲット VM に対し、イベントの送信を中止するよう伝えます。イベントは破棄されるのではなく、次に ReleaseEvents コマンドが送信されるまで保持されます。大量のイベントが生成される状況で、デバッガ VM に送信されるイベントの数を制御する場合に、このコマンドは有用です。イベントはデバッガバックエンドにより保持されます。 アプリケーションの実行は、バッファがオーバーフローしないよう、デバッガバックエンドにより凍結されます。コマンドへの応答は保持されないため、このコマンドによる影響はありません。イベントが既に保持されている場合、このコマンドは無視されます。
- 出力データ
- (なし)
- 応答データ
- (なし)
ターゲット VM に対し、イベントの送信を継続するよう伝えます。このコマンドは、HoldEvents コマンドの実行後に通常のアクティビティを復元する際に使用されます。現在有効な HoldEvents コマンドが存在しない場合、このコマンドは無視されます。
- 出力データ
- (なし)
- 応答データ
- (なし)
参照型の JNI シグニチャーを返します。JNI シグニチャー形式については、Java Native Inteface 仕様を参照してください。プリミティブクラスの場合、返されるシグニチャーは対応するプリミティブ型のシグニチャーです。 たとえば、「I」は、java.lang.Integer.TYPE により表されるクラスのシグニチャーとして返されます。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
| | | | | |
|
string | signature | 参照型の JNI シグニチャー
|
指定された参照型をロードした java.lang.ClassLoader のインスタンスを返します。システムクラスローダにより参照型がロードされた場合、返されるオブジェクト ID は null になります。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
| | | | | |
|
classLoaderID | classLoader | 参照型のクラスローダ
|
参照型の修飾子 (アクセスフラグとしても知られる) を返します。返されるビットマスクには、参照型の宣言に関する情報が含まれます。参照型がプリミティブクラス (例、java.lang.Integer.TYPE) の配列である場合、返されるビットマスクの値は定義されません。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
| | | | | |
|
int | modBits | VM 仕様で定義された修飾子ビット
|
参照型の各フィールドに関する情報を返します。継承したフィールドは含まれません。フィールドリストには、コンパイラにより作成されたすべての合成フィールドが含まれます。クラスファイル内で出現する順番に、フィールドが返されます。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
| | | | | |
|
int | declared | 宣言されたフィールドの数
|
declared 回の繰り返し:
|
| fieldID | fieldID | フィールド ID
|
| string | name | フィールド名
|
| string | signature | JNI シグニチャーフィールド
|
| int | modBits | フィールド宣言に関する補足情報を提供する修飾子ビットフラグ (アクセスフラグとしても知られる)。個別のフラグ値は、VM 仕様で定義されています。また、合成属性機能を利用可能な場合には、0xf0000000 ビットはフィールドを合成フィールドとして識別します。
|
参照型の各メソッドに関する情報を返します。継承したフィールドは含まれません。メソッドのリストには、コンストラクタ (名前「<init>」で識別される)、存在する場合には初期化メソッド (名前「<clinit>」で識別される)、およびコンパイラにより作成されたすべての合成メソッドが含まれます。メソッドは、クラスファイル内で出現する順番に返されます。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
| | | | | |
|
int | declared | 宣言されたメソッドの数
|
declared 回の繰り返し:
|
| methodID | methodID | メソッド ID
|
| string | name | メソッドの名前
|
| string | signature | メソッドの JNI シグニチャー
|
| int | modBits | メソッド宣言に関する補足情報を提供する修飾子ビットフラグ (アクセスフラグとしても知られる)。個別のフラグ値は、VM 仕様で定義されています。また、合成属性機能を利用可能な場合には、0xf0000000 ビットはメソッドを合成メソッドとして識別します。
|
参照型の 1 つまたは複数の static フィールドの値を返します。各フィールドは、参照型のメンバまたはそのスーパークラス、スーパーインタフェース、または実装されたインタフェースの 1 つでなければなりません。アクセス制御は実行されません。 このため、たとえば private フィールドの値が取得可能になります。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
int | fields | 取得する値の数
|
fields 回の繰り返し:
|
| fieldID | fieldID | 取得対象のフィールド
|
- 応答データ
| | | | | |
|
int | values | 返される値の数
|
values 回の繰り返し:
|
| value | value | フィールド値
|
参照型の宣言されたソースファイル名を返します。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
| | | | | |
|
string | sourceFile | ソースファイル名。ファイルのパス情報は含まれません。
|
この型の内部で直接ネストしたクラスとインタフェースを返します。これらの型の内部でさらにネストしたタイプは含まれません。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
| | | | | |
|
int | classes | ネストしたクラスとインタフェースの数
|
classes 回の繰り返し:
|
| byte | refTypeTag | 続く参照型の種類
|
| referenceTypeID | typeID | ネストしたクラスまたはインタフェース ID
|
参照型の現在のステータスを返します。VM 仕様で説明されているように、ステータスは参照型の初期化の程度を示します。返されるステータスビットは、配列型およびプリミティブクラス (java.lang.Integer.TYPE など) に対して未定義です。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
-
このクラスによる実装が宣言されたインタフェースを返します。間接的に実装された (実装済みのインタフェースから継承した、またはスーパークラスが実装した) インタフェースは、含まれません。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
| | | | | |
|
int | interfaces | 実装したインタフェースの数
|
interfaces 回の繰り返し:
|
| interfaceID | interfaceType | 実装されたインタフェース
|
この型に対応するクラスオブジェクトを返します。
- 出力データ
| | | | | |
|
referenceTypeID | refType | 参照型 ID
|
- 応答データ
| | | | | |
|
classObjectID | classObject | クラスオブジェクト
|
クラスの直属のスーパークラスを返します。
- 出力データ
-
- 応答データ
| | | | | |
|
classID | superclass | スーパークラス (java.lang.Object のクラス ID が指定されている場合は null)
|
1 つまたは複数の static フィールドの値を設定します。各フィールドは、クラス型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースの 1 つでなければなりません。アクセス制御は実行されません。 このため、たとえば private フィールドの値が設定可能になります。最後のフィールドを設定することはできません。プリミティブ値の場合、値の型とフィールドの型は正確に一致している必要があります。オブジェクト値の場合、値の型からフィールドの型への広範な参照変換が存在し、かつフィールドの型がロードされている必要があります。
- 出力データ
| | | | | |
|
classID | clazz | クラス型 ID
|
int | values | 設定するフィールドの数
|
values 回の繰り返し:
|
| fieldID | fieldID | 設定するフィールド
|
| untagged-value | value | フィールドに入力する値
|
- 応答データ
- (なし)
static メソッドを呼び出します。メソッドは、クラス型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースの 1 つでなければなりません。アクセス制御は実行されません。 このため、たとえば private メソッドの呼び出しが可能です。メソッド呼び出しが、指定されたスレッドで実行されます。メソッド呼び出しは、指定されたスレッドがイベントにより中断されている場合にだけ実行されます。ターゲット VM がフロントエンドにより中断されている場合には、メソッド呼び出しはサポートされません。
指定されたメソッドは、指定された引数リスト内の引数を使って呼び出されます。メソッド呼び出しは同期的に行われます。 そのため、呼び出されたメソッドがターゲット VM 内で復帰するまで、応答パケットは送信されません。戻り値 (大抵の場合、void 値) は応答パケットに含まれます。呼び出されたメソッドが例外をスローする場合、例外オブジェクト ID が応答パケットに設定されます。 それ以外の場合、例外オブジェクト ID は null になります。
プリミティブ引数の場合、引数値の型と引数の型は厳密に一致している必要があります。オブジェクト引数の場合、引数値の型から引数の型への広範な参照変換が存在し、かつ引数の型をロードする必要があります。
デフォルトでは、ターゲット VM 内のすべてのスレッドがイベントまたはコマンドによって以前に中断された場合、それらはメソッドの呼び出し中に再開されます。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ブレークポイントまたは他のイベントが、呼び出し中に発生する可能性があります。ただし、この暗黙の再開動作が ThreadReference 再開コマンドの動作とほとんど同じであることに注意してください。 このため、スレッドの中断カウントが 1 を超えている場合、呼び出し中も中断状態のままになります。デフォルトでは、呼び出し前の状態が何であっても、ターゲット VM 内のすべてのスレッドは呼び出し完了時に中断します。
options
フィールドに INVOKE_SINGLE_THREADED ビットフラグを指定することにより、呼び出し中の他のスレッドの再開を防ぐことができます。 ただし、前述したデッドロックから保護したり、それを回復したりすることはできないため、オプションは注意深く指定してください。指定されたスレッドだけが再開されます (前述したすべてのスレッドと同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドは再び中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。
ターゲット VM が (たとえば、VirtualMachine 破棄コマンドを使って) 呼び出し中に切断されると、 メソッド呼び出しは続行されます。
- 出力データ
| | | | | |
|
classID | clazz | クラス型 ID
|
threadID | thread | 呼び出しを実行するスレッド
|
methodID | method | 呼び出し先のメソッド
|
int | arguments |
|
arguments 回の繰り返し:
|
| value | arg | 引数の値
|
int | options | 呼び出しオプション
|
- 応答データ
| | | | | |
|
value | returnValue | 戻り値
|
tagged-objectID | exception | 生成された例外
|
指定されたコンストラクタを呼び出して、この型の新規オブジェクトを作成します。コンストラクタメソッド ID は、クラス型のメンバでなければなりません。インスタンスの作成は、指定されたスレッドで実行されます。インスタンス作成は、指定されたスレッドがイベントにより中断されている場合にだけ実行されます。ターゲット VM がフロントエンドにより中断されている場合には、メソッド呼び出しはサポートされません。
指定されたコンストラクタは、指定された引数リスト内の引数を使って呼び出されます。コンストラクタ呼び出しは同期的に行われます。 そのため、呼び出されたメソッドがターゲット VM 内で復帰するまで、応答パケットは送信されません。戻り値 (大抵の場合、void 値) は応答パケットに含まれます。コンストラクタが例外をスローする場合、例外オブジェクト ID が応答パケットに設定されます。 それ以外の場合、例外オブジェクト ID は null になります。
プリミティブ引数の場合、引数値の型と引数の型は厳密に一致している必要があります。オブジェクト引数の場合、引数値の型から引数の型への広範な参照変換が存在し、かつ引数の型をロードする必要があります。
デフォルトでは、ターゲット VM 内のすべてのスレッドがイベントまたはコマンドによって以前に中断された場合、それらはメソッドの呼び出し中に再開されます。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ブレークポイントまたは他のイベントが、呼び出し中に発生する可能性があります。ただし、この暗黙の再開動作が ThreadReference 再開コマンドの動作とほとんど同じであることに注意してください。 このため、スレッドの中断カウントが 1 を超えている場合、呼び出し中も中断状態のままになります。デフォルトでは、呼び出し前の状態が何であっても、ターゲット VM 内のすべてのスレッドは呼び出し完了時に中断します。
options
フィールドに INVOKE_SINGLE_THREADED ビットフラグを指定することにより、呼び出し中の他のスレッドの再開を防ぐことができます。 ただし、前述したデッドロックから保護したり、それを回復したりすることはできないため、オプションは注意深く指定してください。指定されたスレッドだけが再開されます (前述したすべてのスレッドと同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドは再び中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。
ターゲット VM が (たとえば、VirtualMachine 破棄コマンドを使って) 呼び出し中に切断されると、 メソッド呼び出しは続行されます。
- 出力データ
| | | | | |
|
classID | clazz | クラス型 ID
|
threadID | thread | コンストラクタを呼び出すスレッド
|
methodID | method | 呼び出し先のコンストラクタ
|
int | arguments |
|
arguments 回の繰り返し:
|
| value | arg | 引数の値
|
int | options | コンストラクタ呼び出しオプション
|
- 応答データ
| | | | | |
|
tagged-objectID | newObject | 新規に作成されたオブジェクト、またはコンストラクタが例外をスローする場合は null
|
tagged-objectID | exception | スローされた例外 (存在する場合)、または null
|
この型の配列オブジェクトを、指定された長さで新規作成します。
- 出力データ
| | | | | |
|
arrayID | arrType | 新規インスタンスの配列型
|
int | length | 配列の長さ
|
- 応答データ
| | | | | |
|
tagged-objectID | newArray | 新規作成された配列オブジェクト
|
メソッドの行番号情報を返します。行テーブルは、ソース行番号を、行の初期コードインデックスにマッピングします。行テーブルは、コードインデックスにより (昇順で) 順序付けされます。
- 出力データ
| | | | | |
|
referenceTypeID | classID | クラス
|
methodID | methodID | メソッド
|
- 応答データ
| | | | | |
|
long | start | メソッド用の有効な最小コードインデックス
|
long | end | メソッド用の有効な最大コードインデックス
|
int | lines | 行番号
|
lines 回の繰り返し:
|
| long | lineCodeIndex | 行の初期コードインデックス (符号なし)
|
| int | lineNumber | 行番号
|
メソッドの変数情報を返します。変数テーブルには、メソッド内で宣言された引数と局所変数が含まれます。インスタンスメソッドの場合、「this」参照がテーブルに含まれます。また、合成変数が存在する場合もあります。
- 出力データ
| | | | | |
|
referenceTypeID | classID | クラス
|
methodID | methodID | メソッド
|
- 応答データ
| | | | | |
|
int | argCnt | 引数で使用されるフレーム内のワード数。8 バイトの引数は 2 つのワードを使用し、その他の引数は 1 つのワードを使用します。
|
int | slots | 変数の数
|
slots 回の繰り返し:
|
| long | codeIndex | 変数が可視状態にある最初のコードインデックス (符号なし)。length と共に使用します。現在の codeIndex <= 現在のフレームコードインデックス < codeIndex + length という条件が満たされる場合にのみ、変数の取得または設定が可能です。
|
| string | name | 変数の名前
|
| string | signature | 変数型の JNI シグニチャー
|
| int | length | codeIndex と共に使用される符号なしの値。現在の codeIndex <= 現在のフレームコードインデックス < code Index + length という条件が満たされる場合にのみ、変数の取得または設定が可能です。
|
| int | slot | フレーム内に存在する局所変数のインデックス
|
メソッドのバイトコードを、JVM 仕様の定義に従って取得します。
- 出力データ
| | | | | |
|
referenceTypeID | classID | クラス
|
methodID | methodID | メソッド
|
- 応答データ
| | | | | |
|
int | bytes |
|
bytes 回の繰り返し:
|
| byte | bytecode | Java バイトコード
|
オブジェクトの実行時の型を返します。実行時の型は、クラスまたは配列です。
- 出力データ
-
- 応答データ
| | | | | |
|
byte | refTypeTag | 続く参照型の種類
|
referenceTypeID | typeID | 実行時の参照型
|
1 つまたは複数のインスタンスフィールドの値を返します。各フィールドは、オブジェクトの型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースのいずれかでなければなりません。アクセス制御は実行されません。 このため、たとえば private フィールドの値が取得可能になります。
- 出力データ
| | | | | |
|
objectID | object | オブジェクト ID
|
int | fields | 取得する値の数
|
fields 回の繰り返し:
|
| fieldID | fieldID | 取得するフィールド
|
- 応答データ
| | | | | |
|
int | values | 返される値の数
|
values 回の繰り返し:
|
| value | value | フィールド値
|
1 つまたは複数のインスタンスフィールドの値を設定します。各フィールドは、オブジェクトの型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースのいずれかでなければなりません。アクセス制御は実行されません。 このため、たとえば private フィールドの値が設定可能になります。プリミティブ値の場合、値の型とフィールドの型は正確に一致している必要があります。オブジェクト値の場合、値の型からフィールドの型への広範な参照変換が存在し、かつフィールドの型がロードされている必要があります。
- 出力データ
| | | | | |
|
objectID | object | オブジェクト ID
|
int | values | 設定するフィールドの数
|
values 回の繰り返し:
|
| fieldID | fieldID | 設定するフィールド
|
| untagged-value | value | フィールドに入力する値
|
- 応答データ
- (なし)
オブジェクトのモニター情報を返します。VM 内のすべてのスレッドを中断する必要があります。
- 出力データ
-
- 応答データ
| | | | | |
|
threadID | owner | モニターの所有者、または null (所有されていない場合)
|
int | entryCount | モニターが入力された回数
|
int | waiters | 現在の所有者が存在しない場合は、モニター 0 を待機中のスレッド数
|
waiters 回の繰り返し:
|
| threadID | thread | このモニターを待機中のスレッド
|
インスタンスメソッドを呼び出します。メソッドは、オブジェクトの型のメンバ、またはそのスーパークラス、スーパーインタフェース、実装されたインタフェースのいずれかでなければなりません。アクセス制御は実行されません。 このため、たとえば private メソッドの呼び出しが可能です。メソッド呼び出しが、指定されたスレッドで実行されます。メソッド呼び出しは、指定されたスレッドがイベントにより中断されている場合にだけ実行されます。ターゲット VM がフロントエンドにより中断されている場合には、メソッド呼び出しはサポートされません。
指定されたメソッドは、指定された引数リスト内の引数を使って呼び出されます。メソッド呼び出しは同期的に行われます。 そのため、呼び出されたメソッドがターゲット VM 内で復帰するまで、応答パケットは送信されません。戻り値 (大抵の場合、void 値) は応答パケットに含まれます。呼び出されたメソッドが例外をスローする場合、例外オブジェクト ID が応答パケットに設定されます。 それ以外の場合、例外オブジェクト ID は null になります。
プリミティブ引数の場合、引数値の型と引数の型は厳密に一致している必要があります。オブジェクト引数の場合、引数値の型から引数の型への広範な参照変換が存在し、かつ引数の型をロードする必要があります。
デフォルトでは、ターゲット VM 内のすべてのスレッドがイベントまたはコマンドによって以前に中断された場合、それらはメソッドの呼び出し中に再開されます。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ブレークポイントまたは他のイベントが、呼び出し中に発生する可能性があります。ただし、この暗黙の再開動作が ThreadReference 再開コマンドの動作とほとんど同じであることに注意してください。 このため、スレッドの中断カウントが 1 を超えている場合、呼び出し中も中断状態のままになります。デフォルトでは、呼び出し前の状態が何であっても、ターゲット VM 内のすべてのスレッドは呼び出し完了時に中断します。
options
フィールドに INVOKE_SINGLE_THREADED ビットフラグを指定することにより、呼び出し中の他のスレッドの再開を防ぐことができます。 ただし、前述したデッドロックから保護したり、それを回復したりすることはできないため、オプションはよく注意して指定してください。指定されたスレッドだけが再開されます (前述したすべてのスレッドと同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドは再び中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。
ターゲット VM が (たとえば、VirtualMachine 破棄コマンドを使って) 呼び出し中に切断されると、 メソッド呼び出しは続行されます。
- 出力データ
| | | | | |
|
objectID | object | オブジェクト ID
|
threadID | thread | 呼び出しを実行するスレッド
|
classID | clazz | クラスの型
|
methodID | method | 呼び出し先のメソッド
|
int | arguments | 引数の数
|
arguments 回の繰り返し:
|
| value | arg | 引数の値
|
int | options | 呼び出しオプション
|
- 応答データ
| | | | | |
|
value | returnValue | 戻り値、または null (例外がスローされた場合)
|
tagged-objectID | exception | スローされた例外 (存在する場合)
|
指定されたオブジェクトのガベージコレクションが実行されるのを防ぎます。デフォルトでは、バックエンド応答内のすべてのオブジェクトは、VM が実行中であればいつでもガベージコレクト可能です。このコマンドを呼び出すと、オブジェクトがガベージコレクトされないことが保証されます。ガベージコレクションを再度有効にするには、EnableCollection コマンドを使用します。ターゲット VM の中断中は、すべてのスレッドが中断しているため、ガベージコレクションは行われません。中断中に変数、フィールドおよび配列の一般的な検査を実行する場合には、明示的にガベージコレクションを無効にしなくても安全です。
このメソッドを使用すると、ターゲット VM 内のガベージコレクションのパターンを変更するため、アプリケーションの動作がデバッガ実行時とデバッガ非実行時とで異なる結果になる可能性があります。 そのため、このメソッドの使用には慎重を期してください。
- 出力データ
-
- 応答データ
- (なし)
このオブジェクトのガベージコレクションを許可します。デフォルトでは、JDWP により返されるすべてのオブジェクトは、VM が実行中であればいつでもガベージコレクト可能です。このコマンドの呼び出しが必要になるのは、DisableCollection コマンドを使ってガベージコレクションを無効に設定した場合だけです。
- 出力データ
-
- 応答データ
- (なし)
オブジェクトが、ターゲット VM 内でガベージコレクトされたかどうかを判定します。
- 出力データ
-
- 応答データ
| | | | | |
|
boolean | isCollected | オブジェクトがガベージコレクトされた場合は true、そうでない場合は false
|
文字列に含まれる文字を返します。
- 出力データ
| | | | | |
|
objectID | stringObject | String オブジェクト ID
|
- 応答データ
| | | | | |
|
string | stringValue | String の値
|
スレッド名を返します。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
-
スレッドを中断します。java.lang.Thread.suspend() とは異なり、Virtual Machine と個別のスレッド両方の中断がカウントされます。スレッドの再実行前に、中断された回数と同数の再開が行われなければなりません。
コマンドを使って単一のスレッドを中断することには、java.lang.Thread.suspend() の場合と同様の危険があります。中断されたスレッドが実行中の別のスレッドに必要なモニターを保持する場合、ターゲット VM でデッドロックが発生する可能性があります (少なくとも、中断されたスレッドが再開されるまで)。
中断されたスレッドは、前述の JDI 再開メソッドの 1 つを使って再開されるまで中断状態を維持することが保証されます。 ターゲット VM 内のアプリケーションが、中断したスレッドを java.lang.Thread#resume を使って再開することはできません。
これにより、スレッドの状態が変化することはない点に注意してください (ThreadStatus を参照)。たとえば、このスレッドが実行中だった場合、他のスレッドからも実行中に見えます。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
- (なし)
指定されたスレッドの実行を再開します。以前にこのスレッドがフロントエンドにより中断されたことがない場合には、このコマンドを呼び出しても効果はありません。それ以外の場合、このスレッド上で保留中の中断の数は減少します。数が 0 まで減少すると、スレッドは実行を継続します。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
- (なし)
スレッドの現在のステータスを返します。スレッドのステータス応答は、最後の実行時のスレッドステータスを示します。中断ステータスは、スレッドの中断に関する情報 (存在する場合) を提供します。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
-
指定されたスレッドを含むスレッドグループを返します。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
| | | | | |
|
threadGroupID | group | このスレッドのスレッドグループ
|
中断したスレッドの現在の呼び出しスタックを返します。フレームシーケンスは、現在実行中のフレームから始まり、その呼び出し元、他のフレームと続きます。スレッドは中断していなければならず、返される frameID はスレッドが中断している間だけ有効です。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
int | startFrame | 取得する最初のフレームのインデックス
|
int | length | 取得するフレームのカウント (-1 は残りすべてを意味します)
|
- 応答データ
| | | | | |
|
int | frames | 取得されたフレーム数
|
frames 回の繰り返し:
|
| frameID | frameID | このフレームの ID
|
| location | location | このフレームの現在位置
|
このスレッドスタックのフレームカウントを返します。スレッドは中断していなければならず、返されるカウントはスレッドが中断している間だけ有効です。中断していない場合、JDWP.Error.errorThreadNotSuspended を返します。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
| | | | | |
|
int | frameCount | このスレッドスタックのフレームカウント
|
このスレッドによりモニターが入力されたオブジェクトを返します。スレッドは中断していなければならず、返される情報はスレッドが中断している間だけ有効です。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
| | | | | |
|
int | owned | 所有するモニターの数
|
owned 回の繰り返し:
|
| tagged-objectID | monitor | 所有されるモニター
|
このスレッドがモニターエントリを待機中の、または java.lang.Object.wait を使って待機中のオブジェクトを返します (存在する場合)。スレッドは中断していなければならず、返される情報はスレッドが中断している間だけ有効です。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
| | | | | |
|
tagged-objectID | monitor | 競合するモニター、または null (現在競合するモニターが存在しない場合)
|
非同期例外をスローしてスレッドを停止します (java.lang.Thread.stop を使用した場合と同様)。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
objectID | throwable | 非同期な例外。このオブジェクトは、java.lang.Throwable のインスタンスまたはサブクラスでなければなりません。
|
- 応答データ
- (なし)
スレッドに対し割り込みを実行します (java.lang.Thread.interrupt を実行した場合と同様)。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
- (なし)
このスレッドの中断カウントを取得します。中断カウントは、スレッドレベルまたは VM レベルの中断コマンドによりスレッドが (対応する再開なしで) 中断された回数です。
- 出力データ
| | | | | |
|
threadID | threadObject | スレッドオブジェクト ID
|
- 応答データ
| | | | | |
|
int | suspendCount | このスレッドの未処理の中断回数
|
スレッドグループ名を返します。
- 出力データ
| | | | | |
|
threadGroupID | group | スレッドグループオブジェクト ID
|
- 応答データ
| | | | | |
|
string | groupName | スレッドグループの名前
|
指定されたスレッドグループを含むスレッドグループ (存在する場合) を返します。
- 出力データ
| | | | | |
|
threadGroupID | group | スレッドグループオブジェクト ID
|
- 応答データ
| | | | | |
|
threadGroupID | parentGroup | 親スレッドグループオブジェクト、または null (指定されたスレッドグループがトップレベルのスレッドグループの場合)
|
このスレッドグループに直接含まれるスレッドおよびスレッドグループを返します。子スレッドグループ内のスレッドおよびスレッドグループは、含まれません。
- 出力データ
| | | | | |
|
threadGroupID | group | スレッドグループオブジェクト ID
|
- 応答データ
| | | | | |
|
int | childThreads | 子スレッドの数
|
childThreads 回の繰り返し:
|
| threadID | childThread | 直接の子スレッド ID
|
int | childGroups | 子スレッドグループの数
|
childGroups 回の繰り返し:
|
| threadGroupID | childGroup | 直接の子スレッドグループ ID
|
指定された配列内のコンポーネントの数を返します。
- 出力データ
| | | | | |
|
arrayID | arrayObject | 配列オブジェクト ID
|
- 応答データ
-
配列コンポーネントの範囲を返します。指定された範囲は、配列境界内にある必要があります。
- 出力データ
| | | | | |
|
arrayID | arrayObject | 配列オブジェクト ID
|
int | firstIndex | 取得対象の最初のインデックス
|
int | length | 取得するコンポーネントの数
|
- 応答データ
| | | | | |
|
arrayregion | values | 取得した値。値がオブジェクトの場合、タグ付けされた値になります。 それ以外の場合は、タグ付けされていない値になります。
|
配列コンポーネントの範囲を設定します。指定された範囲は、配列境界内にある必要があります。プリミティブ値の場合、各値の型と配列コンポーネントの型は正確に一致している必要があります。オブジェクト値の場合、値型から配列コンポーネント型への広範な参照変換が存在し、かつ配列コンポーネント型がロードされている必要があります。
- 出力データ
| | | | | |
|
arrayID | arrayObject | 配列オブジェクト ID
|
int | firstIndex | 設定対象の最初のインデックス
|
int | values | 設定する値の数
|
values 回の繰り返し:
|
| untagged-value | value | 設定する値
|
- 応答データ
- (なし)
このクラスローダに対してロードするよう要求されたすべてのクラスのリストを返します。このクラスローダは、返されたリスト内の各クラスの起動クラスローダと見なされます。このリストには、このローダにより定義された各参照型、およびこのクラスローダにより別のクラスローダへ委譲されたロードのすべての型が含まれます。可視クラスリストは、型ネームスペースに関する有用なプロパティを保持します。特定の型ネームスペースは、リスト中で最高 1 回現れます。このクラスローダにより定義されたクラスの型名を使って宣言された各フィールドまたは変数は、その単一型で解釈処理される必要があります。
返されるリストの順番は保証されません。
- 出力データ
| | | | | |
|
classLoaderID | classLoaderObject | クラスローダのオブジェクト ID
|
- 応答データ
| | | | | |
|
int | classes | 可視クラスの番号
|
classes 回の繰り返し:
|
| byte | refTypeTag | 続く参照型の種類
|
| referenceTypeID | typeID | このクラスローダに対する可視クラス
|
イベント要求を設定します。この要求で指定されたイベントの発生時に、ターゲット VM からイベント が送信されます。
- 出力データ
| | | | | |
|
byte | eventKind | 要求するイベントの種類。要求可能なイベントリストの詳細は、JDWP.EventKind を参照してください。
|
byte | suspendPolicy | このイベントの発生時に中断するスレッド。イベント順序およびコマンド応答は、スレッドが中断および再開する順序を正確に反映することに留意してください。たとえば、VM を中断するイベントの発生前に、VM 全体の再開が処理される場合、再開コマンドへの応答は、中断イベントより前にトランスポートに書き込まれます。
|
int | modifiers | 生成されるイベント数の制御に使用される制約。修飾子は、イベントがイベントキューに配置される前に指定する必要のある追加テストを指定します。このコレクションで指定された順序で各修飾子をイベントに適用することにより、イベントはフィルタ処理されます。 すべての修飾子を満たすイベントのみがレポートされます。 ターゲット VM からデバッガ VM に送信されるイベントトラフィックの量を減らすことにより、フィルタ処理でデバッガのパフォーマンスを劇的に向上させることが可能です。
|
modifiers 回の繰り返し:
|
| byte | modKind | 修飾子の種類
|
| Case Count - modKind が 1 の場合:
| 要求されたイベントのレポートを、指定された回数後、最高 1 回に制限します。このフィルタが最初に count - 1 回処理された時点では、イベントはレポートされません。1 回限りのイベントを要求する場合は、このメソッドをカウント 1 で呼び出します。カウントが 0 に達すると、この要求内の続くフィルタすべてが適用されます。これらのフィルタのいずれもイベントを抑制しない場合、そのイベントはレポートされます。それ以外の場合、イベントはレポートされません。どちらの場合にも、この要求では続くイベントは決してレポートされることはありません。この修飾子は、あらゆる種類のイベントに使用可能です。
|
| int | count | イベント前のカウント。1 回限りのイベントで使用します。
|
| Case Conditional - modKind が 2 の場合:
| 式の条件節
|
| int | exprID | 将来での使用のため予約されています。
|
| Case ThreadOnly - modKind が 3 の場合:
| レポートされたイベントを、指定されたスレッド内に制限します。この修飾子は、クラスの読み込み解除を除く、あらゆる種類のイベントに使用可能です。
|
| threadID | thread | 要求されたスレッド
|
| Case ClassOnly - modKind が 4 の場合:
| クラス準備イベントの場合に、この要求で生成されたイベントを制限して、指定された参照型および任意のサブタイプの準備となるようにします。他のイベントの場合、この要求で生成されるイベントが、指定された参照型またはその任意のサブタイプ内に位置するように制限します。イベントは、指定された参照型に安全にキャスト可能な参照型内の任意の位置で生成されます。この修飾子は、クラスの読み込み解除、スレッド開始、およびスレッド終了を除く、すべての種類のイベントで使用可能です。
|
| referenceTypeID | clazz | 要求されたクラス
|
| Case ClassMatch - modKind が 5 の場合:
| レポート対象のイベントを、指定された制限付き正規表現に一致する名前を持つクラスのイベントに制限します。クラス準備イベントの場合、準備されたクラス名が一致します。クラスの読み込み解除イベントの場合、読み込み解除されたクラス名が一致します。他のイベントでは、イベント位置のクラス名が一致します。この修飾子は、スレッド開始およびスレッド終了を除く、すべての種類のイベントで使用可能です。
|
| string | classPattern | 要求されたクラスパターン。マッチングは、指定されたクラスパターンに正確に一致する場合、およびパターンが「*」で始まるまたは終わる場合 (例、「*.Foo」、「java.*」) だけに制限されます。
|
| Case ClassExclude - modKind が 6 の場合:
| レポート対象のイベントを、指定された制限付き正規表現に名前が一致しないクラスのイベントに制限します。クラス準備イベントの場合、準備されたクラス名が一致します。クラスの読み込み解除イベントの場合、読み込み解除されたクラス名が一致します。他のイベントでは、イベント位置のクラス名が一致します。この修飾子は、スレッド開始およびスレッド終了を除く、すべての種類のイベントで使用可能です。
|
| string | classPattern | 許可されないクラスパターン。マッチングは、指定されたクラスパターンに正確に一致する場合、およびパターンが「*」で始まるまたは終わる場合 (例、「*.Foo」、「java.*」) だけに制限されます。
|
| Case LocationOnly - modKind が 7 の場合:
| レポート対象のイベントを、指定された場所で発生するイベントに制限します。この修飾子は、ブレークポイント、フィールドアクセス、フィールド変更、ステップ、および例外イベントと共に使用可能です。
|
| location | loc | 要求される場所
|
| Case ExceptionOnly - modKind が 8 の場合:
| レポート対象の例外を、クラスおよびそれがキャッチされるかどうかを基準に制限します。この修飾子は、例外イベントでのみ使用可能です。
|
| referenceTypeID | exceptionOrNull | レポート対象の例外。null (0) は、全種類の例外をレポートすることを意味します。null 以外の場合、レポートされる例外イベントを、指定された型またはその任意のサブタイプに制限します。
|
| boolean | caught | キャッチされた例外をレポートします。
|
| boolean | uncaught | キャッチされなかった例外をレポートします。例外がスローされた時点で、例外がキャッチされたかどうかを常に判断できるわけではありません。詳細は、複合イベントの例外イベントのキャッチ位置に関する説明を参照してください。
|
| Case FieldOnly - modKind が 9 の場合:
| レポート対象のイベントを、指定されたフィールドで発生するイベントに制限します。この修飾子は、フィールドアクセスおよびフィールド変更イベントでのみ使用可能です。
|
| referenceTypeID | declaring | フィールドが宣言される型
|
| fieldID | fieldID | 要求されるフィールド
|
| Case Step - modKind が 10 の場合:
| レポート対象のステップイベントを、深さおよびサイズの制限を満たすものだけに制限します。この修飾子は、ステップイベントでのみ使用可能です。
|
| threadID | thread | ステップ実行を行うスレッド
|
| int | size | 各ステップのサイズ。JDWP.StepSize を参照してください。
|
| int | depth | スタック制限の相対呼び出し。JDWP.StepDepth を参照してください。
|
- 応答データ
-
イベント要求を解除します。
- 出力データ
| | | | | |
|
byte | event | 解除するイベントタイプ
|
int | requestID | 解除する要求の ID
|
- 応答データ
- (なし)
設定されたブレークポイントをすべて削除します。
- 出力データ
- (なし)
- 応答データ
- (なし)
指定されたフレーム内の 1 つまたは複数のローカル変数の値を返します。各変数は、フレームのコードインデックスで可視である必要があります。ローカル変数情報が利用できなくても、フロントエンドが正しいローカル変数インデックスを判別できるなら、値の取得は可能です。一般に、ローカル変数テーブルの情報にアクセスしなくても、メソッドシグニチャーからメソッド引数のインデックスを判定できます。
- 出力データ
| | | | | |
|
threadID | threadObject | フレームのスレッド
|
frameID | frame | フレーム ID
|
int | slots | 取得する値の数
|
slots 回の繰り返し:
|
| int | slot | フレーム内に存在する局所変数のインデックス
|
| byte | sigbyte | 変数の型を識別するタグ
|
- 応答データ
| | | | | |
|
int | values | 取得する値の数
|
values 回の繰り返し:
|
| value | slotValue | ローカル変数の値
|
1 つまたは複数のローカル変数の値を設定します。各変数は、現在のフレームコードインデックスで可視である必要があります。プリミティブ値の場合、値の型と変数の型は正確に一致している必要があります。オブジェクト値の場合、値の型から変数の型への広範な参照変換が存在し、かつ変数の型がロードされている必要があります。ローカル変数情報を利用できない場合でも、フロントエンドが正しいローカル変数インデックスを判別できるなら、値の設定は可能です。一般に、ローカル変数テーブルの情報にアクセスしなくても、メソッドシグニチャーからメソッド引数のインデックスを判定できます。
- 出力データ
| | | | | |
|
threadID | threadObject | フレームのスレッド
|
frameID | frame | フレーム ID
|
int | slotValues | 設定する値の数
|
slotValues 回の繰り返し:
|
| int | slot | フレーム ID
|
| value | slotValue | 設定する値
|
- 応答データ
- (なし)
このフレームに対する 'this' 参照の値を返します。フレームのメソッドが static または native の場合、応答には null オブジェクト参照が含まれます。
- 出力データ
| | | | | |
|
threadID | threadObject | フレームのスレッド
|
frameID | frame | フレーム ID
|
- 応答データ
| | | | | |
|
tagged-objectID | objectThis | このフレームに対する 'this' オブジェクト
|
このクラスオブジェクトを反映した参照型を返します。
- 出力データ
| | | | | |
|
classObjectID | classObject | クラスオブジェクト
|
- 応答データ
| | | | | |
|
byte | refTypeTag | 続く参照型の種類
|
referenceTypeID | typeID | リフレクトされた参照型
|
いくつかのイベントが、指定された時刻にターゲット VM で発生します。たとえば、指定された場所に対する複数のブレークポイント要求が存在するか、同じ場所でブレークポイント要求としてステップ実行を行う場合を考えます。これらのイベントは、複合イベントとしてまとめて配信されます。一貫性を保つため、レポートするイベントが 1 つだけであっても、イベントの配信には常に複合イベントが使用されます。複合イベントとしてグループ化されるイベントには、次の方法で制限が課されます。
- 常に単独の複合イベント:
- 同一スレッド用の他のスレッド開始イベントと共にのみ機能:
- 同一スレッド用の他のスレッド終了イベントと共にのみ機能:
- 同一クラス用の他のクラス準備イベントと共にのみ機能:
- 同一クラス用の他のクラス読み込み解除イベントと共にのみ機能:
- 同一フィールドアクセス用のアクセスウォッチポイントイベントと共にのみ機能:
- 同一フィールド変更用の他の変更ウォッチポイントイベントと共にのみ機能:
- 同一の例外が発生した場合に他の ExceptionEvent と共にのみ機能:
- 同一位置および同一スレッド内で、このグループの他のメンバと共にのみ機能:
- ブレークポイントイベント
- ステップイベント
- メソッドに入るイベント
- メソッドから出るイベント
- イベントデータ
| | | | | |
|
byte | suspendPolicy | この複合イベントにより中断されたスレッド
|
int | events | セット内のイベント
|
events 回の繰り返し:
|
| byte | eventKind | イベントの種類のセレクタ
|
| Case VMStart - eventKind が JDWP.EventKind.VM_START の場合:
| ターゲット VM の初期化通知。メインスレッドの開始前およびアプリケーションコードの実行前に、このイベントは受け取られます。このイベントが発生する前に、大量のシステムコードが実行され、多数のシステムクラスがロードされます。このイベントは、明示的に要求されていなくても、常にターゲット VM により生成されます。
|
| int | requestID | 生成されたイベントの要求 (イベントが自動的に生成された場合は 0)
|
| threadID | thread | 初期スレッド
|
| Case VMStart - eventKind が JDWP.EventKind.SINGLE_STEP の場合:
| ターゲット VM のステップ完了通知。その場所でコードが実行される前に、ステップイベントが生成されます。
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | ステップ実行の行われたスレッド
|
| location | location | ステップ実行の行われた場所
|
| Case Breakpoint - eventKind が JDWP.EventKind.BREAKPOINT の場合:
| ターゲット VM のブレークポイント通知。その場所でコードが実行される前に、ブレークポイントイベントが生成されます。
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | ブレークポイントをヒットしたスレッド
|
| location | location | ヒットした場所
|
| Case MethodEntry - eventKind が JDWP.EventKind.METHOD_ENTRY の場合:
| ターゲット VM のメソッド呼び出し通知。このイベントは、呼び出されたメソッド内のコードが実行される前に生成されます。メソッドに入るイベントは、ネイティブおよび非ネイティブのメソッドの両方で生成されます。 いくつかの VM では、メソッドがスレッドの初期化の一部として呼び出される場合、特定のスレッドのスレッド開始イベントが発生する前に、そのスレッド用のメソッドに入るイベントが発生することがあります。
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | メソッドに入ったスレッド
|
| location | location | エントリの位置
|
| Case MethodExit - eventKind が JDWP.EventKind.METHOD_EXIT の場合:
| ターゲット VM のメソッド復帰通知。このイベントは、メソッド内のすべてのコードが実行された後で生成されます。 ただし、このイベントの位置は、メソッド内で最後に実行された位置になります。メソッド終了イベントは、ネイティブおよび非ネイティブのメソッドの両方で生成されます。メソッドが例外をスローして終了する場合には、メソッド終了イベントは生成されません。
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | メソッドから出たスレッド
|
| location | location | 終了位置
|
| Case Exception - eventKind が JDWP.EventKind.EXCEPTION の場合:
| ターゲット VM の例外通知。例外が非ネイティブメソッドからスローされる場合、例外イベントは例外がスローされた位置で生成されます。例外がネイティブメソッドからスローされる場合、例外スロー後の最初の非ネイティブ位置で例外イベントは生成されます。
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | 例外付きのスレッド
|
| location | location | 例外がスローされる場所 (またはネイティブメソッドからスローされる場合には、スロー後の最初の非ネイティブの位置)
|
| tagged-objectID | exception | スローされた例外
|
| location | catchLocation | キャッチした場所、または 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 によってはずっと以前に発生したかもしれない) の作成に関する情報を提供しません。
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | 開始したスレッド
|
| Case ThreadDeath - eventKind が JDWP.EventKind.THREAD_DEATH の場合:
| ターゲット VM の完了スレッド通知。通知は、終了しつつあるスレッドにより終了前に生成されます。このタイミングのため、VirtualMachine.allThreads は、このイベントの受信後に、このスレッドを返すことができます。 このイベントは、スレッドオブジェクトの寿命に関する情報を提供しないことに留意してください。それは、ターゲット VM に存在する参照に基づいて、すぐにコレクトされる場合もされない場合もあります。
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | 終了するスレッド
|
| Case ClassPrepare - eventKind が JDWP.EventKind.CLASS_PREPARE の場合:
| ターゲット VM のクラス準備通知。クラス準備の定義については、JVM 仕様を参照してください。プリミティブクラス (例、java.lang.Integer.TYPE) の場合、クラス準備イベントは生成されません。
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | 準備中のスレッド。まれに、ターゲット VM 内のデバッガシステムスレッド内でこのイベントが発生することがあります。デバッガスレッドはこれらのイベントの発生を防ぐための予防措置を講じますが、ある状況下、特に java.lang.Error のいくつかのサブクラスでは避けることができません。イベントがデバッガシステムスレッドにより生成される場合、このメソッドが返す値は null になります。 また、イベントの要求された中断ポリシーが EVENT_THREAD の場合、すべてのスレッドが代わりに中断し、複合イベントの中断ポリシーがこの変更をリフレクトします。 前述の内容は、ターゲット VM により通常の (非デバッグ) 操作中に作成されたシステムスレッドには当てはまりません。
|
| byte | refTypeTag | 参照型の種類。JDWP.TypeTag を参照してください。
|
| referenceTypeID | typeID | 準備中の型
|
| string | signature | 型のシグニチャー
|
| int | status | 型のステータス。JDWP.ClassStatus を参照してください。
|
| Case ClassUnload - eventKind が JDWP.EventKind.CLASS_UNLOAD の場合:
| ターゲット VM 内のクラスの読み込み解除通知。 ガベージコレクションの実行中には、デバッガバックエンドに厳しい制約が存在します。 このため、読み込み解除情報は大幅に制限されます。
|
| int | requestID | 生成されたイベントの要求
|
| string | signature | 型のシグニチャー
|
| Case FieldAccess - eventKind が JDWP.EventKind.FIELD_ACCESS の場合:
| ターゲット VM のフィールドアクセス通知。フィールドの変更は、フィールドアクセスとは見なされません。
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | アクセス中のスレッド
|
| location | location | アクセスの位置
|
| byte | refTypeTag | 参照型の種類。JDWP.TypeTag を参照してください。
|
| referenceTypeID | typeID | フィールドの型
|
| fieldID | fieldID | アクセス対象のフィールド
|
| tagged-objectID | object | アクセス対象のオブジェクト (static の場合は null=0)
|
| Case FieldModification - eventKind が JDWP.EventKind.FIELD_MODIFICATION の場合:
| ターゲット VM のフィールド変更通知
|
| int | requestID | 生成されたイベントの要求
|
| threadID | thread | 変更中のスレッド
|
| location | location | 変更位置
|
| byte | refTypeTag | 参照型の種類。JDWP.TypeTag を参照してください。
|
| referenceTypeID | typeID | フィールドの型
|
| fieldID | fieldID | 変更対象のフィールド
|
| tagged-objectID | object | 変更対象のオブジェクト (static の場合は null=0)
|
| value | valueToBe | 割り当てられる値
|
| Case VMDeath - eventKind が JDWP.EventKind.VM_DEATH の場合:
|
|
| int | requestID | 生成されたイベントの要求 (常に 0)
|
| |
|
INVALID_TAG | 500 | オブジェクト型 ID またはクラスタグ
|
ALREADY_INVOKING | 502 | 以前の呼び出しが未完了
|
INVALID_INDEX | 503 |
|
INVALID_LENGTH | 504 |
|
INVALID_STRING | 506 |
|
INVALID_CLASS_LOADER | 507 |
|
INVALID_ARRAY | 508 |
|
TRANSPORT_LOAD | 509 |
|
TRANSPORT_INIT | 510 |
|
NATIVE_METHOD | 511 |
|
INVALID_COUNT | 512 |
|
NONE | 0 |
|
INVALID_THREAD | 10 |
|
INVALID_THREAD_GROUP | 11 |
|
INVALID_PRIORITY | 12 |
|
THREAD_NOT_SUSPENDED | 13 |
|
THREAD_SUSPENDED | 14 |
|
INVALID_OBJECT | 20 |
|
INVALID_CLASS | 21 |
|
CLASS_NOT_PREPARED | 22 |
|
INVALID_METHODID | 23 |
|
INVALID_LOCATION | 24 |
|
INVALID_FIELDID | 25 |
|
INVALID_FRAMEID | 30 |
|
NO_MORE_FRAMES | 31 |
|
OPAQUE_FRAME | 32 |
|
NOT_CURRENT_FRAME | 33 |
|
TYPE_MISMATCH | 34 |
|
INVALID_SLOT | 35 |
|
DUPLICATE | 40 |
|
NOT_FOUND | 41 |
|
INVALID_MONITOR | 50 |
|
NOT_MONITOR_OWNER | 51 |
|
INTERRUPT | 52 |
|
INVALID_CLASS_FORMAT | 60 |
|
CIRCULAR_CLASS_DEFINITION | 61 |
|
FAILS_VERIFICATION | 62 |
|
ADD_METHOD_NOT_IMPLEMENTED | 63 |
|
SCHEMA_CHANGE_NOT_IMPLEMENTED | 64 |
|
INVALID_TYPESTATE | 65 |
|
NOT_IMPLEMENTED | 99 |
|
NULL_POINTER | 100 |
|
ABSENT_INFORMATION | 101 |
|
INVALID_EVENT_TYPE | 102 |
|
ILLEGAL_ARGUMENT | 103 |
|
OUT_OF_MEMORY | 110 |
|
ACCESS_DENIED | 111 |
|
VM_DEAD | 112 |
|
INTERNAL | 113 |
|
UNATTACHED_THREAD | 115 |
|
| |
|
VM_DISCONNECTED | 100 | JDWP を越えて送信されることはありません。
|
VM_START | JDWP.EventKind.VM_INIT |
|
THREAD_DEATH | JDWP.EventKind.THREAD_END |
|
SINGLE_STEP | 1 |
|
BREAKPOINT | 2 |
|
FRAME_POP | 3 |
|
EXCEPTION | 4 |
|
USER_DEFINED | 5 |
|
THREAD_START | 6 |
|
THREAD_END | 7 |
|
CLASS_PREPARE | 8 |
|
CLASS_UNLOAD | 9 |
|
CLASS_LOAD | 10 |
|
FIELD_ACCESS | 20 |
|
FIELD_MODIFICATION | 21 |
|
EXCEPTION_CATCH | 30 |
|
METHOD_ENTRY | 40 |
|
METHOD_EXIT | 41 |
|
VM_INIT | 90 |
|
VM_DEATH | 99 |
|
| |
|
ZOMBIE | 0 |
|
RUNNING | 1 |
|
SLEEPING | 2 |
|
MONITOR | 3 |
|
WAIT | 4 |
|
| |
|
SUSPEND_STATUS_SUSPENDED | 0x1 |
|
| |
|
VERIFIED | 1 |
|
PREPARED | 2 |
|
INITIALIZED | 4 |
|
ERROR | 8 |
|
| |
|
CLASS | 1 | ReferenceType はクラスです。
|
INTERFACE | 2 | ReferenceType はインタフェースです。
|
ARRAY | 3 | ReferenceType は配列です。
|
| |
|
ARRAY | 91 | '[' - 配列オブジェクト (objectID サイズ)
|
BYTE | 66 | 'B' - バイト値 (1 バイト)
|
CHAR | 67 | 'C' - 文字値 (2 バイト)
|
OBJECT | 76 | 'L' - オブジェクト (objectID サイズ)
|
FLOAT | 70 | 'F' - 浮動値 (4 バイト)
|
DOUBLE | 68 | 'D' - 倍精度値 (8 バイト)
|
INT | 73 | 'I' - 整数値 (4 バイト)
|
LONG | 74 | 'J' - ロング値 (8 バイト)
|
SHORT | 83 | 'S' -ショート値 (2 バイト)
|
VOID | 86 | 'V' - void 値 (バイトなし)
|
BOOLEAN | 90 | 'Z' - ブール値 (1 バイト)
|
STRING | 115 | 's' - String オブジェクト (objectID サイズ)
|
THREAD | 116 | 't' - Thread オブジェクト (objectID サイズ)
|
THREAD_GROUP | 103 | 'g' - ThreadGroup オブジェクト (objectID サイズ)
|
CLASS_LOADER | 108 | 'l' - ClassLoader オブジェクト (objectID サイズ)
|
CLASS_OBJECT | 99 | 'c' - クラスオブジェクト (objectID サイズ)
|
| |
|
INTO | 0 | ステップの終了前に発生する任意のメソッド呼び出しを開始します。
|
OVER | 1 | ステップの終了前に発生する任意のメソッド呼び出しに進みます。
|
OUT | 2 | 現在のメソッドから出ます。
|
| |
|
MIN | 0 | 最小限のステップ (多くの場合、バイトコード命令)
|
LINE | 1 | 次のソース行へのステップ
|
| |
|
NONE | 0 | このイベントの遭遇時にスレッドを中断しません。
|
EVENT_THREAD | 1 | このイベントの遭遇時にイベントスレッドを中断します。
|
ALL | 2 | このイベントの遭遇時にすべてのスレッドを中断します。
|
| |
|
INVOKE_SINGLE_THREADED | 0x01 | それ以外の場合、開始したすべてのスレッド
|
INVOKE_NONVIRTUAL | 0x02 | それ以外の場合、通常の仮想呼び出し (インスタンスメソッドのみ)
|