|
Java Debug Interface | ||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public interface ClassType
ターゲット VM 内のクラスのミラーです。ClassType は、Java 言語仕様で定義されている意味での真のクラス (インタフェースでも、配列型でもない) に適用される ReferenceType
の改良版です。この種のクラスのインスタンスをミラー化するすべての ObjectReference
の型は、ClassType です。
ObjectReference
フィールドの概要 | |
---|---|
static int |
INVOKE_SINGLE_THREADED
呼び出し側のスレッドだけを再開してメソッドの呼び出しを実行します。 |
メソッドの概要 | |
---|---|
List<InterfaceType> |
allInterfaces()
このクラスにより直接的または間接的に実装されたインタフェースを取得します。 |
Method |
concreteMethodByName(String name,
String signature)
指定された名前およびシグニチャーを持つこのクラスから認識可能な、単一の非 abstract Method を返します。 |
List<InterfaceType> |
interfaces()
このクラスにより直接実装されたインタフェースを取得します。 |
Value |
invokeMethod(ThreadReference thread,
Method method,
List<? extends Value> arguments,
int options)
ターゲット VM 内の指定された static Method を呼び出します。 |
boolean |
isEnum()
このクラスが enum として宣言されたかどうかを判定します。 |
ObjectReference |
newInstance(ThreadReference thread,
Method method,
List<? extends Value> arguments,
int options)
ターゲット VM 内の指定されたコンストラクタの Method を使って、この型の新規インスタンスを構築します。 |
void |
setValue(Field field,
Value value)
値を static フィールドに代入します。 |
List<ClassType> |
subclasses()
現在ロードされている、このクラスの直接のサブクラスを取得します。 |
ClassType |
superclass()
このクラスのスーパークラスを取得します。 |
インタフェース com.sun.jdi.Type から継承されたメソッド |
---|
signature |
インタフェース com.sun.jdi.Mirror から継承されたメソッド |
---|
toString, virtualMachine |
インタフェース java.lang.Comparable から継承されたメソッド |
---|
compareTo |
インタフェース com.sun.jdi.Accessible から継承されたメソッド |
---|
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers |
フィールドの詳細 |
---|
static final int INVOKE_SINGLE_THREADED
メソッドの詳細 |
---|
ClassType superclass()
ClassType
。このようなクラスが存在しない場合は null を返すList<InterfaceType> interfaces()
InterfaceType
オブジェクトのリスト。このようなオブジェクトが存在しない場合、長さゼロのリストを返す
ClassNotPreparedException
- このクラスがまだ準備されていない場合。List<InterfaceType> allInterfaces()
interfaces()
によって返されるインタフェースは、すべてのスーパーインタフェースと同様に返されます。
- 戻り値:
- ターゲット VM 内のこの ClassType のインタフェースをミラー化する
InterfaceType
オブジェクトのリスト。このようなオブジェクトが存在しない場合、長さゼロのリストを返す。
- 例外:
ClassNotPreparedException
- このクラスがまだ準備されていない場合。
List<ClassType> subclasses()
ClassType
オブジェクトのリスト。このようなクラスが存在しない場合、このメソッドは長さゼロのリストを返す。boolean isEnum()
true
、そうでない場合は false。void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException
Field
は、この ClassType に対して有効である必要があります。つまり、ミラー化されたオブジェクトのクラスのフィールドであるか、そのクラスのスーパークラスのフィールドである必要があります。フィールドは final であってはいけません。
オブジェクトの値は、このフィールドの型への代入互換性を持たなければいけません (これは、このフィールド型は、囲むクラスのクラスローダーによってロードする必要があることを意味する)。プリミティブ値は、このフィールドの型への代入互換性を持つか、情報を失わずにこのフィールドの型に変換できる必要があります。代入互換性の詳細は、「Java 言語仕様」のセクション 5.2 を参照してください。
field
- 設定するフィールドvalue
- 代入される値
IllegalArgumentException
- フィールドが static ではない場合、フィールドが final である場合、またはフィールドがこのクラス内に存在しない場合。
ClassNotLoadedException
- フィールドの型が、適切なクラスローダーによってロードされていない場合。
InvalidTypeException
- 値の型が宣言されたフィールド型と一致しない場合。
VMCannotBeModifiedException
- VirtualMachine が読み取り専用の場合 (VirtualMachine.canBeModified()
を参照)。Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Method
を呼び出します。指定するメソッドは、このクラス内またはスーパークラス内で定義できます。このメソッドには static メソッドを指定できますが、static 初期化子を指定することはできません。新規オブジェクトを作成し、そのコンストラクタを実行するには、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 を参照してください。
デフォルトでは、ターゲット VM 内のすべてのスレッドは、そのスレッドがイベントまたは VirtualMachine.suspend()
か ThreadReference.suspend()
によって以前に中断された場合、メソッドの呼び出し中に再開されます。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ただし、この暗黙の再開は、ThreadReference.resume()
とまったく同様に行われるため、スレッドの中断カウントが 1 を超える場合は、呼び出し中にスレッドが再開されません。このため、デッドロックが発生する可能性があることに留意してください。デフォルトでは、ターゲット VM 内のすべてのスレッドは、呼び出しの完了時に中断します (呼び出し前のスレッドの状態とは無関係)。ブレークポイントまたは他のイベントが、呼び出し中に発生する可能性があります。この場合、前述したデッドロックが発生することがあります。また、invokeMethod がクライアントのイベントハンドラスレッドから呼び出された場合も、デッドロックが発生することがあります。この場合、このスレッドは invokeMethod が完了するまで待機するので、新規イベントの発生に伴う EventSet の読み取りを行いません。この新規 EventSet が SUSPEND_ALL である場合、EventSet が再開されないので、デッドロックが発生します。この状況を避けるには、invokeMethod の実行前にすべての EventRequest を無効にするか、invokeMethod をクライアントのイベントハンドラスレッドから呼び出さないようにしてください。
呼び出し中にほかのスレッドが再開されるのを防止するには、options
引数に INVOKE_SINGLE_THREADED
ビットフラグを指定します。ただし、このオプションでは、デッドロックを回避したり、デッドロックから回復することはできないので、慎重に使用する必要があります。指定されたスレッドだけが再開されます (前述したすべてのスレッドの場合と同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドは再び中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。
呼び出し中に VirtualMachine.dispose()
などによってターゲット VM が切断された場合でも、メソッドの呼び出しは続行されます。
thread
- 呼び出しを行うスレッド。method
- 呼び出す Method
。arguments
- 呼び出されたメソッドにバインドされた Value
引数のリスト。リストから取得した値は、メソッドシグニチャーに指定されている順序で引数に代入される。options
- 整数ビットフラグオプション。
Value
のミラー。
IllegalArgumentException
- メソッドがこのクラスまたはスーパークラスのメンバーではない場合、引数リストのサイズがメソッドに対して宣言された引数の数に一致しない場合、またはメソッドが初期化子、コンストラクタ、static 初期化子のいずれかである場合。
{@link
- InvalidTypeException} 対応するメソッドの引数型に代入できない引数が引数リストにある場合。
ClassNotLoadedException
- 引数型が、適切なクラスローダーによってロードされていない場合。
IncompatibleThreadStateException
- 指定されたスレッドが、イベントによって中断されていない場合。
InvocationException
- メソッドの呼び出しにより、ターゲット VM で例外が発生した場合。
InvalidTypeException
- 引数が次の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければならない (これは、囲むクラスのクラスローダーによってこの引数型をロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。代入互換性の詳細は、「Java 言語仕様」のセクション 5.2 を参照してください。
VMCannotBeModifiedException
- VirtualMachine が読み取り専用の場合 (VirtualMachine.canBeModified()
を参照)。ObjectReference newInstance(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Method
を使って、この型の新規インスタンスを構築します。指定するコンストラクタは、このクラス内で定義する必要があります。
インスタンスの作成は、指定されたスレッドで実行されます。指定されたスレッドがそのスレッド内で発生したイベントによって中断された場合にだけ、インスタンスの生成は行われます。ターゲット VM が VirtualMachine.suspend()
によって中断された場合、または指定されたスレッドが ThreadReference.suspend()
によって中断された場合、インスタンスの生成はサポートされません。
指定されたコンストラクタは、指定された引数リスト内の引数を使って呼び出されます。呼び出しは同期をとられます。 コンストラクタがターゲット VM 内で復帰するまで、このメソッドは復帰しません。呼び出されたメソッドが例外をスローする場合、このメソッドはスローされた例外オブジェクトに対するミラーを含む InvocationException
をスローします。
オブジェクト引数は、この引数型への代入互換性を持たなければいけません (これは、この引数型は、囲むクラスのクラスローダーによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。呼び出されているメソッドが引数の可変数を受け取る場合、最後の引数型が特定の要素型の配列になります。一致する位置にある引数は、省略される (つまり null となる) 可能性や、あるいは、同じ要素型の配列になる (つまり、同じ型のほかの引数の任意の数が続く要素型の引数となる) 可能性があります。引数が省略される場合は、配列の長さがゼロである要素型が渡されます。要素型はプリミティブ型である可能性もあります。自動ボックス化はサポートされていません。 代入互換性の詳細は、「Java 言語仕様」 のセクション 5.2 を参照してください。
デフォルトでは、ターゲット VM 内のすべてのスレッドは、そのスレッドがイベントまたは VirtualMachine.suspend()
か ThreadReference.suspend()
によって以前に中断された場合、メソッドの呼び出し中に再開されます。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ブレークポイントまたは他のイベントが、呼び出し中に発生する可能性があります。ただし、この暗黙の再開は、ThreadReference.resume()
とまったく同様に行われるため、スレッドの中断カウントが 1 を超える場合は、呼び出し中にスレッドが再開されないことに留意してください。デフォルトでは、ターゲット VM 内のすべてのスレッドは、呼び出しの完了時に中断します (呼び出し前のスレッドの状態とは無関係)。
呼び出し中にほかのスレッドが再開されるのを防止するには、options
引数に INVOKE_SINGLE_THREADED
ビットフラグを指定します。ただし、このオプションでは、デッドロックを回避したり、デッドロックから回復することはできないので、慎重に使用する必要があります。指定されたスレッドだけが再開されます (前述したすべてのスレッドの場合と同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドは再び中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。
呼び出し中に VirtualMachine.dispose()
などによってターゲット VM が切断された場合でも、メソッドの呼び出しは続行されます。
thread
- 呼び出しを行うスレッドmethod
- 呼び出すコンストラクタの Method
。arguments
- 呼び出されたコンストラクタにバインドされた Value
引数のリスト。リストから取得した値は、コンストラクタシグニチャーに指定されている順序で引数に代入されるoptions
- 整数ビットフラグオプション
ObjectReference
ミラー。
IllegalArgumentException
- メソッドがこのクラスのメンバーでない場合、引数リストのサイズがコンストラクタに対して宣言された引数の数に一致しない場合、またはメソッドがコンストラクタでない場合。
{@link
- InvalidTypeException} 対応するメソッドの引数型に代入できない引数が引数リストにある場合。
ClassNotLoadedException
- 引数型が、適切なクラスローダーによってロードされていない場合。
IncompatibleThreadStateException
- 指定されたスレッドが、イベントによって中断されていない場合。
InvocationException
- メソッドの呼び出しにより、ターゲット VM で例外が発生した場合。
InvalidTypeException
- 引数が次の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければならない (これは、囲むクラスのクラスローダーによってこの引数型をロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。代入互換性の詳細は、「Java 言語仕様」のセクション 5.2 を参照してください。
VMCannotBeModifiedException
- VirtualMachine が読み取り専用の場合 (VirtualMachine.canBeModified()
を参照)。Method concreteMethodByName(String name, String signature)
Method
を返します。シグニチャー形式の詳細は、ReferenceType.methodsByName(java.lang.String, java.lang.String)
を参照してください。
返されるメソッド (null 以外の場合) は、ClassType
のコンポーネントです。
name
- 検索対象のメソッドの名前signature
- 検索対象のメソッドのシグニチャー
Method
。一致するものがない場合は null
ClassNotPreparedException
- クラスが準備されていないために、メソッドがまだ利用可能ではない場合。ReferenceType.visibleMethods()
,
ReferenceType.methodsByName(java.lang.String name)
,
ReferenceType.methodsByName(java.lang.String name, java.lang.String signature)
|
Java Debug Interface | ||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |