|
Java Debug Interface | ||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||
public interface ObjectReference
ターゲット 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<Field,Value> |
getValues(List<? extends Field> fields)
このオブジェクトの複数のインスタンスまたは static フィールド、あるいはその両方の値を取得します。 |
int |
hashCode()
この ObjectReference のハッシュコード値を返します。 |
Value |
invokeMethod(ThreadReference thread,
Method method,
List<? extends Value> 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<ThreadReference> |
waitingThreads()
このオブジェクトのモニターを現在待機している各スレッドに対して、 ThreadReference を含む List を返します。 |
| インタフェース com.sun.jdi.Value から継承されたメソッド |
|---|
type |
| インタフェース com.sun.jdi.Mirror から継承されたメソッド |
|---|
toString, virtualMachine |
| フィールドの詳細 |
|---|
static final int INVOKE_SINGLE_THREADED
static final int INVOKE_NONVIRTUAL
| メソッドの詳細 |
|---|
ReferenceType referenceType()
ReferenceType を取得します。この型は、現在この型を保持するフィールドまたは変数の、宣言された型のサブクラスまたは実装元になります。たとえば、次の文の直後で使用します。
Object obj = new String("Hello, world!");
obj の ReferenceType は、java.lang.Object ではなく、java.lang.String をミラー化します。
オブジェクトの型は不変なので、このメソッドはミラー化されたオブジェクトの寿命の間は常に同じ ReferenceType を返します。
返される ReferenceType は、ClassType または ArrayType です。InterfaceType は返されません。
ReferenceTypeValue getValue(Field sig)
sig - 要求された値を含むフィールド
Value
IllegalArgumentException - フィールドがこのオブジェクトのクラスとして有効でない場合Map<Field,Value> getValues(List<? extends Field> fields)
fields - 要求された値を含む Field オブジェクトのリスト
Field オブジェクトとその Value のマップ
IllegalArgumentException - このオブジェクトのクラスに無効なフィールドがある場合
void setValue(Field field,
Value value)
throws InvalidTypeException,
ClassNotLoadedException
Field は、この ObjectReference に対して有効である必要があります。つまり、Field は、ミラー化されたオブジェクトのクラスのフィールド、またはそのクラスのスーパークラスのフィールドである必要があります。static の場合は、フィールドは final ではあってはなりません。
オブジェクトの値は、このフィールドの型への代入互換性を持たなければなりません (これは、このフィールド型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ値は、このフィールドの型への代入互換性を持つか、情報を失わずにこのフィールドの型に変換できる必要があります。代入互換性の詳細は、「JavaTM 言語仕様」のセクション 5.2 を参照してください。
field - 要求された値を含むフィールドvalue - 代入する新しい値
IllegalArgumentException - フィールドがこのオブジェクトのクラスとして有効でない場合
InvalidTypeException - 値の型がフィールドの型に一致しない場合
ClassNotLoadedException - 値が null でない場合、およびフィールドの型が、適切なクラスローダによってロードされていない場合
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照
Value invokeMethod(ThreadReference thread,
Method method,
List<? extends Value> 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 extends com.sun.jdi.Value>, int) を使用します。
メソッドの呼び出しは、指定されたスレッド内で行われます。指定されたスレッドがそのスレッド内で発生したイベントにより中断される場合にのみ、メソッドの呼び出しを行います。ターゲット VM が VirtualMachine.suspend() を使って中断された場合、または指定されたスレッドが ThreadReference.suspend() を使って中断された場合、メソッドの呼び出しはサポートされません
指定されたメソッドは、指定された引数リスト内の引数を使って呼び出されます。メソッドの呼び出しは、同期をとられます。呼び出されたメソッドがターゲット VM で復帰するまで、このメソッドは復帰しません。呼び出されたメソッドが例外をスローする場合、このメソッドはスローされた例外オブジェクトに対するミラーを含む InvocationException をスローします。
オブジェクト引数は、この引数型への代入互換性を持たなければなりません (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持つか、情報を失わずにこの引数型に変換できる必要があります。 呼び出されているメソッドが引数の可変数を受け取る場合、最後の引数型が特定の要素型の配列になります。一致する位置にある引数は、省略される (つまり null となる) 可能性や、あるいは、同じ要素型の配列になる (つまり、同じ型のほかの引数の任意の数が続く要素型の引数となる) 可能性があります。引数が省略される場合は、配列の長さがゼロである要素型が渡されます。要素型はプリミティブ型である可能性もあります。自動ボックス化はサポートされていません。 代入互換性の詳細は、「Java 言語仕様」 のセクション 5.2 を参照してください。
デフォルトでは、このメソッドは、動的ルックアップを使用して呼び出されます (「Java 言語仕様」 第 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 - 呼び出す Methodarguments - 呼び出されるメソッドにバインドされた Value 引数のリスト。リストから取得した値は、メソッドシグニチャーに指定されている順序で引数に代入されるoptions - 整数ビットフラグオプション
Value のミラー
IllegalArgumentException - メソッドがこのオブジェクトのクラスのメンバでない場合、引数リストのサイズがこのメソッドに対して宣言された引数の数に一致しない場合、このメソッドがコンストラクタまたは static 初期化子である場合、あるいは INVOKE_NONVIRTUAL が指定され、メソッドが abstract またはインタフェースメンバである場合
{@link - InvalidTypeException} 対応するメソッドの引数型に代入できない引数が引数リストにある場合
ClassNotLoadedException - 引数型が、適切なクラスローダによってロードされていない場合
IncompatibleThreadStateException - 指定されたスレッドが、イベントによって中断されていない場合
InvocationException - メソッドの呼び出しにより、ターゲット VM で例外が発生した場合
InvalidTypeException - 引数が以下の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければならない (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。代入互換性の詳細は、Java 言語仕様のセクション 5.2 を参照
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照void disableCollection()
ObjectReference 値は、ターゲット VM の実行時の任意の時点でベージコレクトされます。このメソッドの呼び出しは、オブジェクトがガベージコレクトされないことを保証します。enableCollection() を使用すると、ガベージコレクションを再開できます。
このメソッドの呼び出しは、カウントされます。このメソッドを呼び出すたびに、ガベージコレクションを再開するには、enableCollection() を呼び出す必要があります。
ターゲット VM が中断されている間は、すべてのスレッドが中断されるため、ガベージコレクションは行われません。中断されているときでも、ガベージコレクションを明示的に無効にすることなく、変数、フィールド、および配列の標準の検査は行われます。
このメソッドを使用すると、ターゲット VM 内のガベージコレクションのパターンが変わるため、アプリケーションの動作がデバッガ実行時とデバッガ非実行時とで異なる結果になる可能性があります。そのため、このメソッドの使用には慎重を期してください。
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照void enableCollection()
ObjectReference 値は、ターゲット VM の実行時の任意の時点でガベージコレクトされます。このメソッドの呼び出しは、ガベージコレクションが disableCollection() で無効になっている場合にだけ必要です。
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照boolean isCollected()
ObjectReference がガベージコレクトされている場合は true、そうでない場合は false
VMCannotBeModifiedException - 仮想マシンが読み取り専用の場合は、VirtualMachine.canBeModified() を参照long uniqueID()
List<ThreadReference> waitingThreads()
throws IncompatibleThreadStateException
ThreadReference を含む List を返します。モニターを待機していると見なされるスレッドの状態については、ThreadReference.currentContendedMonitor() を参照してください。
この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、VirtualMachine.canGetMonitorInfo() を参照してください。
ThreadReference オブジェクトの List。モニターを待機しているスレッドが存在しない場合、リストの長さはゼロになる
UnsupportedOperationException - ターゲット VM でこの操作がサポートされていない場合
IncompatibleThreadStateException - ターゲット VM に中断されていない待機中のスレッドがある場合
ThreadReference owningThread()
throws IncompatibleThreadStateException
ThreadReference を返します。所有権の定義については、ThreadReference.ownedMonitors() を参照してください。
この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、VirtualMachine.canGetMonitorInfo() を参照してください。
ThreadReference。モニターが所有されていない場合は null
UnsupportedOperationException - ターゲット VM でこの操作がサポートされていない場合
IncompatibleThreadStateException - 所有するスレッドがターゲット VM で中断されてない場合
int entryCount()
throws IncompatibleThreadStateException
ThreadReference.ownedMonitors() を参照してください。
この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、VirtualMachine.canGetMonitorInfo() を参照してください。
UnsupportedOperationException - ターゲット VM でこの操作がサポートされていない場合
IncompatibleThreadStateException - 所有するスレッドがターゲット VM で中断されてない場合owningThread()boolean equals(Object obj)
Object 内の equalsint hashCode()
Object 内の hashCode
|
Java Debug Interface | ||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||