|
Java Debug Interface | ||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||
public interface ThreadReference
ターゲット 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<StackFrame> |
frames()
スレッドの現在の呼び出しスタック内にあるすべての StackFrame の List を返します。 |
List<StackFrame> |
frames(int start,
int length)
スレッドの現在の呼び出しスタックにある StackFrame ミラーの範囲の List を返します。 |
void |
interrupt()
デバッガによってスレッドが中断されていない場合、このスレッドに割り込みます。 |
boolean |
isAtBreakpoint()
スレッドがブレークポイントで中断しているかどうかを判定します。 |
boolean |
isSuspended()
デバッガによってスレッドが中断されているかどうかを判定します。 |
String |
name()
このスレッドの名前を返します。 |
List<ObjectReference> |
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 |
| フィールドの詳細 |
|---|
static final int THREAD_STATUS_UNKNOWN
static final int THREAD_STATUS_ZOMBIE
static final int THREAD_STATUS_RUNNING
static final int THREAD_STATUS_SLEEPING
static final int THREAD_STATUS_MONITOR
static final int THREAD_STATUS_WAIT
static final int THREAD_STATUS_NOT_STARTED
| メソッドの詳細 |
|---|
String name()
void suspend()
resume() を使用して再開するか、VirtualMachine.resume() を使用してほかのスレッドから再開できます。
Thread.suspend() と異なり、仮想マシンの中断と各スレッドの中断はどちらもカウントされます。スレッドは、再実行される前に、(resume() または resume() によって) 中断された回数と同じ回数だけ再開する必要があります。
このメソッドを使用して単一のスレッドを中断する場合、Thread.suspend() を使用する場合と同様の注意が必要です。中断されたスレッドが保持しているモニターが、別の実行中のスレッドから要求された場合、ターゲット VM 内で (少なくとも中断されたスレッドが再開されるまでの間) デッドロックが発生する可能性があります。
中断されたスレッドは、前述の JDI 再開メソッドの 1 つを使って再開されるまで中断状態を維持することが保証されます。 ターゲット VM 内のアプリケーションが、中断したスレッドを java.lang.Thread#resume を使って再開することはできません。
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照void resume()
suspend()、VirtualMachine.suspend()、SUSPEND_ALL イベント、または SUSPEND_EVENT_THREAD イベントのいずれでもない場合は、このメソッドを呼び出しても再開できません。これらのいずれかによって中断されたスレッドの場合は、このスレッドの保留状態の中断カウントが減ります。カウントがゼロになると、スレッドの実行が継続されます。注: 中断の原因となったイベントからスレッドを再開するには、通常、EventSet.resume() を使用します。
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照int suspendCount()
suspend() を参照してください。
void stop(ObjectReference throwable)
throws InvalidTypeException
Throwable オブジェクトを使用してこのスレッドを停止します。
throwable - スローする非同期の例外
InvalidTypeException - throwable がターゲット VM 内の java.lang.Throwable のインスタンスでない場合
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照Thread.stop(Throwable)void interrupt()
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照Thread.interrupt()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 のいずれかboolean isSuspended()
true、そうでない場合は falseboolean isAtBreakpoint()
true、そうでない場合は falseThreadGroupReference threadGroup()
ThreadGroupReference
int frameCount()
throws IncompatibleThreadStateException
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
List<StackFrame> frames()
throws IncompatibleThreadStateException
StackFrame の List を返します。この情報を取得するには、スレッドを中断する必要があります (通常は VM への割り込みによって)。この情報は、スレッドが再開されると無効になります。
StackFrame の List
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
StackFrame frame(int index)
throws IncompatibleThreadStateException
StackFrame を返します。インデックス 0 は、現在のフレームです。0 より大きいインデックスの場合は、呼び出し側のフレームを示します。この情報を取得するには、スレッドを中断する必要があります (通常は VM への割り込みによって)。この情報は、スレッドが再開されると無効になります。
index - 目的のフレーム
StackFrame
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
IndexOutOfBoundsException - インデックスが frameCount() 以上の場合、または負の場合
List<StackFrame> 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()
List<ObjectReference> ownedMonitors()
throws IncompatibleThreadStateException
ObjectReference の List を返します。synchronized 文または synchronized メソッドのエントリを使用してスレッドがモニターに入ってから、モニターが Object.wait(long) によって破棄されていない場合は、そのモニターはスレッドによって所有されています。
この操作は、ターゲット仮想マシンでサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、VirtualMachine.canGetOwnedMonitorInfo() を使用してください。
ObjectReference オブジェクトの List。このスレッドによってモニターが所有されていない場合は、このリストの長さはゼロになる
UnsupportedOperationException - ターゲット仮想マシンがこの操作をサポートしていない場合
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
ObjectReference currentContendedMonitor()
throws IncompatibleThreadStateException
ObjectReference を返します。スレッドは、synchronized メソッドのエントリ、synchronized 文、または Object.wait(long) を使用して、モニターを待機している可能性があります。最初の 2 つの場合と Object.wait(long) による場合を識別するには、status() メソッドを使用します。
この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、VirtualMachine.canGetCurrentContendedMonitor() を使用してください。
ObjectReference。スレッドがモニターを待機していない場合は null
UnsupportedOperationException - ターゲット仮想マシンがこの操作をサポートしていない場合
IncompatibleThreadStateException - ターゲット VM 内でスレッドが中断されていない場合
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 の呼び出し側のフレームとそれまでのフレームはどれも、ネイティブであってはいけません。
この操作は、ターゲット仮想マシンでサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、VirtualMachine.canPopFrames() を使用してください。
frame - ポップするスタックフレーム。frame はこのスレッドの呼び出しスタック上に存在する必要がある
UnsupportedOperationException - ターゲット仮想マシンがこの操作をサポートしていない場合。VirtualMachine.canPopFrames() を参照
IncompatibleThreadStateException - このスレッドが中断されていない場合
IllegalArgumentException - frame がこのスレッドの呼び出しスタック上に存在しない場合
NativeMethodException - ポップされたフレームの中にネイティブメソッドに対するものが存在する場合、または frame の 1 つ前のフレームがネイティブである場合
InvalidStackFrameException - frame が無効になった場合。このスレッドがいったん再開されると、そのスタックフレームは有効でなくなる。フレームがこれ以上存在しない場合はこの例外もスローされる
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照
|
Java Debug Interface | ||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||