|
Java Debug Interface | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
ターゲット VM に現在存在するオブジェクトです。ObjectReference は、そのオブジェクトだけをミラー化します。ObjectReference が現在割り当てられている Field
または LocalVariable
に固有のオブジェクトではありません。ObjectReference は、いくつかのフィールドまたは変数、あるいはその両方から 0 または 1 つ以上の参照を持つことができます。
ターゲット VM が切断された場合、ObjectReference
を直接的または間接的に引数に取る ObjectReference
上の任意のメソッドは、VMDisconnectedException
をスローし、VMDisconnectEvent
が EventQueue
から読み出せるようになります。
ObjectReference
を直接的または間接的に引数に取る ObjectReference
上の任意のメソッドは、ターゲット VM がメモリが不足すると VMOutOfMemoryException
をスローします。
ObjectReference
を直接的または間接的に引数に取る ObjectReference
上の任意のメソッドは、ミラーオブジェクトがガベージコレクトされた場合に ObjectCollectedException
をスローします。
フィールドの概要 | |
static int |
INVOKE_NONVIRTUAL
非仮想メソッドの呼び出しを実行します。 |
static int |
INVOKE_SINGLE_THREADED
呼び出し側のスレッドだけを再開してメソッドの呼び出しを実行します。 |
メソッドの概要 | |
void |
disableCollection()
このオブジェクトに対するガベージコレクションを回避します。 |
void |
enableCollection()
このオブジェクトに対するガベージコレクションを許可します。 |
int |
entryCount()
現在所有しているスレッドが、このオブジェクトのモニターにエントリした回数を返します。 |
boolean |
equals(Object obj)
指定されたオブジェクトがこの ObjectReference と等しいかどうか比較します。 |
Value |
getValue(Field sig)
このオブジェクトの指定されたインスタンスまたは static フィールドの値を取得します。 |
Map |
getValues(List fields)
このオブジェクトの複数のインスタンスまたは static フィールド、あるいはその両方の値を取得します。 |
int |
hashCode()
この ObjectReference のハッシュコード値を返します。 |
Value |
invokeMethod(ThreadReference thread,
Method method,
List arguments,
int options)
ターゲット VM 内のこのオブジェクトの指定された Method を呼び出します。 |
boolean |
isCollected()
ターゲット VM でこのオブジェクトがガベージコレクトされているかどうかを判定します。 |
ThreadReference |
owningThread()
このオブジェクトのモニターを現在所有するスレッドがある場合は、そのスレッドの ThreadReference を返します。 |
ReferenceType |
referenceType()
このオブジェクトの型をミラー化する ReferenceType を取得します。 |
void |
setValue(Field field,
Value value)
このオブジェクトのインスタンスフィールドまたは static フィールドの値を設定します。 |
long |
uniqueID()
この ObjectReference の一意の識別子を返します。 |
List |
waitingThreads()
このオブジェクトのモニターを現在待機している各スレッドに対して、 ThreadReference を含む List を返します。 |
インタフェース com.sun.jdi.Value から継承したメソッド |
type |
インタフェース com.sun.jdi.Mirror から継承したメソッド |
toString, virtualMachine |
フィールドの詳細 |
public static final int INVOKE_SINGLE_THREADED
public static final int INVOKE_NONVIRTUAL
メソッドの詳細 |
public ReferenceType referenceType()
ReferenceType
を取得します。この型は、現在この型を保持するフィールドまたは変数の、宣言された型のサブクラスまたは実装元になります。たとえば、次の文の直後で使用します。
Object obj = new String("Hello, world!");
obj の ReferenceType は、java.lang.Object ではなく、java.lang.String をミラー化します。
オブジェクトの型は不変なので、このメソッドはミラー化されたオブジェクトの寿命の間は常に同じ ReferenceType を返します。
返される ReferenceType は、ClassType
または ArrayType
です。InterfaceType
は返されません。
ReferenceType
public Value getValue(Field sig)
sig
- 要求された値を含むフィールド
Value
IllegalArgumentException
- フィールドがこのオブジェクトのクラスとして有効でない場合public Map getValues(List fields)
fields
- 要求された値を含む Field
オブジェクトのリスト
Field
オブジェクトとその Value
のマップ
IllegalArgumentException
- このオブジェクトのクラスに無効なフィールドがある場合public void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException
Field
は、この ObjectReference に対して有効である必要があります。つまり、 このオブジェクトからフィールドの型への、ワイド型参照変換が行われる必要があります。 static の場合は、フィールドは final ではあってはなりません。
オブジェクトの値は、このフィールドの型への代入互換性を持たなければなりません (これは、このフィールド型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ値は、このフィールドの型への代入互換性を持つか、情報を失わずにこのフィールドの型に変換できる必要があります。代入互換性の詳細は、 JavaTM Language Specification のセクション 5.2 を参照してください。
field
- 要求された値を含むフィールドvalue
- 代入する新しい値
IllegalArgumentException
- フィールドがこのオブジェクトのクラスとして有効でない場合
InvalidTypeException
- 値の型がフィールドの型に一致しない場合
ClassNotLoadedException
- フィールドの型が、適切なクラスローダによってロードされていない場合public Value invokeMethod(ThreadReference thread, Method method, List arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Method
を呼び出します。指定するメソッドは、このオブジェクトのクラス、このオブジェクトのクラスのスーパークラス、またはこのオブジェクトによって実装されたインタフェース内で定義できます。このメソッドには、static メソッドまたはインスタンスメソッドを指定できますが、static 初期化子や static コンストラクタを指定することはできません。新規オブジェクトの生成およびそのコンストラクタの実行には、ClassType.newInstance(com.sun.jdi.ThreadReference, com.sun.jdi.Method, java.util.List, int)
を使用します。
メソッドの呼び出しは、指定されたスレッド内で行われます。指定されたスレッドがそのスレッド内で発生したイベントにより中断される場合にのみ、メソッドの呼び出しを行います。ターゲット VM が VirtualMachine.suspend()
を使って中断された場合、または指定されたスレッドが ThreadReference.suspend()
を使って中断された場合、メソッドの呼び出しはサポートされません
指定されたメソッドは、指定された引数リスト内の引数を使って呼び出されます。メソッドの呼び出しは、同期をとられます。呼び出されたメソッドがターゲット VM で復帰するまで、このメソッドは復帰しません。 呼び出されたメソッドの戻り値の型が void
以外の型である場合、戻り値のミラーはこのメソッドによって返されます。それ以外の場合、null
が返されます。呼び出されたメソッドが例外をスローする場合、このメソッドは、スローされた例外オブジェクトに対するミラーを含む InvocationException
をスローします。
オブジェクト引数は、この引数型への代入互換性を持たなければなりません (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持つか、情報を失わずにこの引数型に変換できる必要があります。代入互換性の詳細は、 Java Language Specification のセクション 5.2 を参照してください。
デフォルトでは、このメソッドは、動的ルックアップを使用して呼び出されます (Java Language Specification 第 2 版のセクション 15.12.4.4 を参照)。特に、この ObjectReference
によってミラー化されたオブジェクトの、実行時の型に基づいてオーバライドが発生します。 この動作は、options
引数に INVOKE_NONVIRTUAL
ビットフラグを指定して変更できます。このフラグを設定すると、このオブジェクトの実行時の型に対してオーバライドが発生するかどうかにかかわらず、指定されたメソッドが呼び出されます。この場合、メソッドは、インタフェースに属していたり、abstract であったりしてはなりません。このオプションは、Java プログラミング言語の super
キーワードで実行されるようなメソッドの呼び出しに使用します。
デフォルトでは、ターゲット VM 内のすべてのスレッドは、そのスレッドがイベントまたは VirtualMachine.suspend()
か ThreadReference.suspend()
によって以前に中断された場合、メソッドの呼び出し中に再開されます。 これは、呼び出されたメソッドが必要とするモニターをいずれかのスレッドが所有する場合に発生するデッドロックを回避するために行われます。呼び出し中にブレークポイントまたは他のイベントが発生する可能性があります。 ただし、この暗黙の再開は、ThreadReference.resume()
と同じように行われるため、スレッドの中断カウントが 1 を超える場合には、呼び出しの間、スレッドは中断状態になることに留意してください。デフォルトでは、呼び出しが完了すると、ターゲット VM 内のすべてのスレッドは、呼び出し前の状態に関係なく中断されます。
呼び出し中に他のスレッドが再開されるのを防止するには、options
引数に INVOKE_SINGLE_THREADED
ビットフラグを指定します。ただし、このオプションでは、デッドロックを回避したり、デッドロックから回復することはできないので、慎重に使用する必要があります。指定されたスレッドだけが再開されます (すべてのスレッドは再開されない)。単一スレッド呼び出しの完了時には、呼び出し側 のスレッドは再度中断されます。単一スレッド呼び出し中に開始されたスレッドは、 その単一スレッド呼び出しの完了時には中断されません。
呼び出し中にターゲット VM が切断された (たとえば、VirtualMachine.dispose()
によって) 場合でも、メソッドの呼び出しは続行されます。
thread
- 呼び出しを行うスレッドmethod
- 呼び出す Method
arguments
- 呼び出されるメソッドにバインドされた Value
引数のリスト。リストから取得した値は、メソッドシグニチャーに指定されている順序で引数に代入されるoptions
- 整数ビットフラグオプション
Value
のミラー
IllegalArgumentException
- メソッドがこのオブジェクトのクラスのメンバでない場合、引数リストのサイズがこのメソッドに対して宣言された引数の数に一致しない場合、このメソッドがコンストラクタまたは static 初期化子である場合、あるいは INVOKE_NONVIRTUAL
が指定され、メソッドが abstract またはインタフェースメンバである場合
{@link
- InvalidTypeException} 対応するメソッドの引数型に代入できない引数が引数リストにある場合
ClassNotLoadedException
- 引数型が、適切なクラスローダによってロードされていない場合
IncompatibleThreadStateException
- 指定されたスレッドが、イベントによって中断されていない場合
InvocationException
- メソッドの呼び出しにより、ターゲット VM で例外が発生した場合
InvalidTypeException
- 引数が以下の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要があります。代入互換性の詳細は、Java 言語仕様のセクション 5.2 を参照してくださいpublic void disableCollection()
ObjectReference
値は、ターゲット VM の実行時の任意の時点でベージコレクトされます。このメソッドの呼び出しは、オブジェクトがガベージコレクトされないことを保証します。enableCollection()
を使用すると、ガベージコレクションを再開できます。
このメソッドの呼び出しは、カウントされます。このメソッドを呼び出すたびに、ガベージコレクションを再開するには、enableCollection()
を呼び出す必要があります。
ターゲット VM が中断されている間は、すべてのスレッドが中断されるので、ガベージコレクションは行われません。中断されているときでも、変数、フィールド、および配列の標準の検査は行われます。ガベージコレクションを明示的に無効にする
このメソッドは、できるだけ使用しないでください。このメソッドを使用すると、ターゲット VM のガベージコレクションの動作が変わり、デバッガ環境のアプリケーションの動作がデバッグしていないときの動作と異なることがあるためです。
public void enableCollection()
ObjectReference
値は、ターゲット VM の実行時の任意の時点でガベージコレクトされます。このメソッドの呼び出しは、ガベージコレクションが disableCollection()
で無効になっている場合にだけ必要です。
public boolean isCollected()
ObjectReference
がガベージコレクトされている場合は true
、そうでない場合は false
public long uniqueID()
public List waitingThreads() throws IncompatibleThreadStateException
ThreadReference
を含む List を返します。モニターを待機していると見なされるスレッドの状態については、ThreadReference.currentContendedMonitor()
を参照してください。
この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、「VirtualMachine#canGetMonitorInfo」を参照してください。
ThreadReference
オブジェクトの List。モニターを待機しているスレッドが存在しない場合、リストの長さはゼロになる
UnsupportedOperationException
- ターゲット VM でこの操作がサポートされていない場合
IncompatibleThreadStateException
- ターゲット VM に中断されていない待機中のスレッドがある場合public ThreadReference owningThread() throws IncompatibleThreadStateException
ThreadReference
を返します。所有権の定義については、ThreadReference.ownedMonitors()
を参照してください。
この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、「VirtualMachine#canGetMonitorInfo」を参照してください。
ThreadReference
。モニターが所有されていない場合は null
UnsupportedOperationException
- ターゲット VM でこの操作がサポートされていない場合
IncompatibleThreadStateException
- 所有するスレッドがターゲット VM で中断されてない場合public int entryCount() throws IncompatibleThreadStateException
ThreadReference.ownedMonitors()
を参照してください。
この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、「VirtualMachine#canGetMonitorInfo」を参照してください。
UnsupportedOperationException
- ターゲット VM でこの操作がサポートされていない場合
IncompatibleThreadStateException
- 所有するスレッドがターゲット VM で中断されてない場合owningThread()
public boolean equals(Object obj)
Object
内の equals
public int hashCode()
Object
内の hashCode
|
Java Debug Interface | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |