|
Java Debug Interface | |||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
ターゲット VM のスレッドオブジェクトです。ThreadReference は、ターゲット VM のスレッド固有の情報に追加アクセスできる ObjectReference です。
| フィールドの概要 | |
static int |
THREAD_STATUS_MONITOR
スレッドは Java モニターを待機中です。 |
static int |
THREAD_STATUS_NOT_STARTED
スレッドは開始されていません。 |
static int |
THREAD_STATUS_RUNNING
スレッドは実行可能です。 |
static int |
THREAD_STATUS_SLEEPING
スレッドはスリープ中です。 |
static int |
THREAD_STATUS_UNKNOWN
スレッドの状態が不明です。 |
static int |
THREAD_STATUS_WAIT
スレッドは待機中です。 |
static int |
THREAD_STATUS_ZOMBIE
スレッドは実行を完了しました。 |
| インタフェース com.sun.jdi.ObjectReference から継承したフィールド |
INVOKE_NONVIRTUAL, INVOKE_SINGLE_THREADED |
| メソッドの概要 | |
ObjectReference |
currentContendedMonitor()
このスレッドが現在モニターを待機している場合は、そのモニターへの ObjectReference を返します。 |
StackFrame |
frame(int index)
スレッドの現在の呼び出しスタック内の指定されたインデックスで StackFrame を返します。 |
int |
frameCount()
スレッドの現在の呼び出しスタック内のスタックフレーム数を返します。 |
List |
frames()
スレッドの現在の呼び出しスタック内にあるすべての StackFrame の List を返します。 |
List |
frames(int start,
int length)
スレッドの現在の呼び出しスタックにある StackFrame ミラーの範囲の List を返します。 |
void |
interrupt()
このスレッドに割り込みます。 |
boolean |
isAtBreakpoint()
スレッドがブレークポイントで中断しているかどうかを判定します。 |
boolean |
isSuspended()
デバッガによってスレッドが中断されているかどうかを判定します。 |
String |
name()
このスレッドの名前を返します。 |
List |
ownedMonitors()
スレッドが所有する各モニターへの ObjectReference の List を返します。 |
void |
popFrames(StackFrame frame)
スタックフレームをポップします。 |
void |
resume()
このスレッドを再開します。 |
int |
status()
スレッドの状態を返します。 |
void |
stop(ObjectReference throwable)
非同期の例外を使用してこのスレッドを停止します。 |
void |
suspend()
このスレッドを中断します。 |
int |
suspendCount()
このスレッドの保留状態の中断回数を返します。 |
ThreadGroupReference |
threadGroup()
このスレッドのスレッドグループを返します。 |
| インタフェース com.sun.jdi.ObjectReference から継承したメソッド |
disableCollection, enableCollection, entryCount, equals, getValue, getValues, hashCode, invokeMethod, isCollected, owningThread, referenceType, setValue, uniqueID, waitingThreads |
| インタフェース com.sun.jdi.Value から継承したメソッド |
type |
| インタフェース com.sun.jdi.Mirror から継承したメソッド |
toString, virtualMachine |
| フィールドの詳細 |
public static final int THREAD_STATUS_UNKNOWN
public static final int THREAD_STATUS_ZOMBIE
public static final int THREAD_STATUS_RUNNING
public static final int THREAD_STATUS_SLEEPING
public static final int THREAD_STATUS_MONITOR
public static final int THREAD_STATUS_WAIT
public static final int THREAD_STATUS_NOT_STARTED
| メソッドの詳細 |
public String name()
public void suspend()
resume() を使用して再開するか、VirtualMachine.resume() を使用してほかのスレッドから再開できます。
Thread.suspend() と異なり、Virtual Machine の中断と各スレッドの中断はどちらもカウントされます。スレッドは、再実行される前に、(resume() または resume() によって) 中断された回数と同じ回数だけ再開する必要があります。
このメソッドを使用して単一のスレッドを中断する場合、Thread.suspend() を使用する場合と同様の注意が必要です。中断されたスレッドが保持しているモニターが、別の実行中のスレッドから要求された場合、ターゲット VM 内で (少なくとも中断されたスレッドが再開されるまでの間) デッドロックが発生する可能性があります。
中断されたスレッドは、上記の JDI 再開メソッドのいずれかを使用して再開するまで、中断状態が保証されます。ターゲット VM 内のアプリケーションから Thread.resume() を使用して、中断されたスレッドを再開することはできません。
public void resume()
suspend() または VirtualMachine.suspend() によって中断されていない場合は、このメソッドを呼び出しても再開できません。これらのいずれかによって中断されたスレッドの場合は、このスレッドの保留状態の中断カウントが減ります。カウントが 0 になると、スレッドの実行が継続されます。
public int suspendCount()
suspend() を参照してください。
public void stop(ObjectReference throwable)
throws InvalidTypeException
Throwable オブジェクトを使用してこのスレッドを停止します。
throwable - スローする非同期の例外
InvalidTypeException - throwable がターゲット VM 内の java.lang.Throwable のインスタンスでない場合Thread.stop(Throwable)public void interrupt()
Thread.interrupt()public int status()
THREAD_STATUS_UNKNOWN を返します。スレッドが中断しているかどうかを判定するには、isSuspended() を使用します。
THREAD_STATUS_UNKNOWN、THREAD_STATUS_ZOMBIE、THREAD_STATUS_RUNNING、THREAD_STATUS_SLEEPING、THREAD_STATUS_MONITOR、THREAD_STATUS_WAIT、または THREAD_STATUS_NOT_STARTED のいずれかpublic boolean isSuspended()
true、それ以外の場合は falsepublic boolean isAtBreakpoint()
true、それ以外の場合は falsepublic ThreadGroupReference threadGroup()
ThreadGroupReference
public int frameCount()
throws IncompatibleThreadStateException
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
public List frames()
throws IncompatibleThreadStateException
StackFrame の List を返します。この情報を取得するには、スレッドを中断する必要があります (通常は VM への割り込みによって)。この情報は、スレッドが再開されると無効になります。
StackFrame の List
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
public StackFrame frame(int index)
throws IncompatibleThreadStateException
StackFrame を返します。インデックス 0 は、現在のフレームです。0 より大きいインデックスの場合は、呼び出し側のフレームを示します。この情報を取得するには、スレッドを中断する必要があります (通常は VM への割り込みによって)。この情報は、スレッドが再開されると無効になります。
index - 目的のフレーム
StackFrame
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
IndexOutOfBoundsException - インデックスが frameCount() 以上の場合、または負の場合
public List frames(int start,
int length)
throws IncompatibleThreadStateException
StackFrame ミラーの範囲の List を返します。この情報を取得するには、スレッドを中断する必要があります (通常は VM への割り込みによって)。この情報は、スレッドが再開されると無効になります。
start - 取得する最初のフレームを表すインデックス。インデックス 0 は現在のフレームを表すlength - 取得するフレーム数
StackFrame の List
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
IndexOutOfBoundsException - 指定された範囲がスタックフレームインデックスの範囲に収まっていない場合。つまり、以下のどれかが true である場合に例外がスローされる
start < 0 start >=frameCount()length < 0 (start+length) >frameCount()
public List ownedMonitors()
throws IncompatibleThreadStateException
ObjectReference の List を返します。synchronized 文または synchronized メソッドのエントリを使用してスレッドがモニターに入ってから、モニターが Object.wait(long) によって破棄されていない場合は、そのモニターはスレッドによって所有されています。
この操作は、ターゲット Virtual Machine でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、VirtualMachine.canGetOwnedMonitorInfo() を使用してください。
ObjectReference オブジェクトの List。このスレッドによってモニターが所有されていない場合は、このリストの長さはゼロになる
UnsupportedOperationException - ターゲット Virtual Machine がこの操作をサポートしていない場合
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
public ObjectReference currentContendedMonitor()
throws IncompatibleThreadStateException
ObjectReference を返します。スレッドは、synchronized メソッドのエントリ、synchronized 文、または Object.wait(long) を使用して、モニターを待機している可能性があります。最初の 2 つの場合と Object.wait(long) による場合を識別するには、status() メソッドを使用します。
この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、VirtualMachine.canGetCurrentContendedMonitor() を使用してください。
ObjectReference。スレッドがモニターを待機していない場合は null
UnsupportedOperationException - ターゲット Virtual Machine がこの操作をサポートしていない場合
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
public void popFrames(StackFrame frame)
throws IncompatibleThreadStateException
パラメータ frame に指定されたフレームとそれ以降のすべてのフレームが、スタックからポップされます。frame の 1 つ前のフレームが、現在のフレームになります。
この操作が終了すると、このスレッドは frame を作成したターゲットメソッドの呼び出し命令で中断状態になります。この呼び出し命令に移動すれば、frame のメソッドを再実行することができます。
オペランドスタックは復元されますが、前回のメソッド呼び出し時に実行された引数に対する変更は取り消されません。たとえば、次のようなメソッド foo を考えます。
void foo(int x) {
System.out.println("Foo: " + x);
x = 4;
System.out.println("pop here");
}
このメソッドを foo(7) として呼び出した後、foo を 2 番目の println の位置でポップして再開した場合、「Foo: 4」と出力されます。
フレームに設定されていたロックは、そのフレームがポップされると解除されます。このことは、ポップされる同期メソッドおよびその内部のすべての同期ブロックにも、同様に当てはまります。
結果として、ブロックは実行されません。
このメソッド呼び出しによって、このスレッドの実行ポイントとロック以外の状態が変わることはありません。具体的には、フィールドの値や I/O ストリームなどの外部リソースの状態が変わることはありません。ただし、ターゲットプログラムの状態が、通常のプログラムフローではあり得ない状態になる場合があります。たとえば、ロックの取得順序に混乱をきたすことが考えられます。このため、ターゲットプログラムが予期しない動作をする可能性があります。
指定されるスレッドは、中断されている必要があります。
このスレッドの StackFrames はすべて無効です。
このメソッドによって生成されるイベントはありません。
frame とそれ以降のフレームはどれも、ネイティブであってはいけません。
この操作は、すべてのターゲット Virtual Machine でサポートされるわけではありません。この操作がサポートされているかどうかを確認するには、VirtualMachine.canPopFrames() を使用してください。
frame - ポップするスタックフレーム。frame はこのスレッドの呼び出しスタック上に存在する必要がある
UnsupportedOperationException - ターゲット Virtual Machine でこの操作がサポートされていない場合。VirtualMachine.canPopFrames() を参照
IncompatibleThreadStateException - このスレッドが中断されていない場合
IllegalArgumentException - frame がこのスレッドの呼び出しスタック上に存在しない場合
NativeMethodException - ポップされたフレームの中にネイティブメソッドに対するものが存在する場合、または frame がネイティブである場合
InvalidStackFrameException - frame が無効になった場合。このスレッドがいったん再開されると、そのスタックフレームは有効でなくなる
|
Java Debug Interface | |||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||