Java Debug Interface

com.sun.jdi
インタフェース ClassType

すべてのスーパーインタフェース:
Accessible, Comparable, Mirror, ReferenceType, Type

public interface ClassType
extends ReferenceType

ターゲット VM 内のクラスのミラーです。ClassType は、Java 言語仕様で定義されている意味での真のクラス (インタフェースでも、配列型でもない) に当てはまる ReferenceType の改良版です。この種のクラスのインスタンスをミラー化するすべての ObjectReference は、その型として ClassType を保持します。

導入されたバージョン:
1.3
関連項目:
ObjectReference

フィールドの概要
static int INVOKE_SINGLE_THREADED
          呼び出し側のスレッドだけを再開してメソッドの呼び出しを実行します。
 
メソッドの概要
 List allInterfaces()
          このクラスにより直接的または間接的に実装されたインタフェースを取得します。
 Method concreteMethodByName(String name, String signature)
          指定された名前およびシグニチャーを持つこのクラスから認識可能な、単一の非 abstract Method を返します。
 List interfaces()
          このクラスにより直接実装されたインタフェースを取得します。
 Value invokeMethod(ThreadReference thread, Method method, List arguments, int options)
          ターゲット VM 内の指定された static Method を呼び出します。
 ObjectReference newInstance(ThreadReference thread, Method method, List arguments, int options)
          ターゲット VM 内の指定されたコンストラクタ Method を使って、この型の新規インスタンスを生成します。
 void setValue(Field field, Value value)
          値を static フィールドに代入します。
 List subclasses()
          現在ロードされている、このクラスの直接のサブクラスを取得します。
 ClassType superclass()
          このクラスのスーパークラスを取得します。
 
インタフェース com.sun.jdi.ReferenceType から継承したメソッド
allFields, allLineLocations, allLineLocations, allMethods, availableStrata, classLoader, classObject, defaultStratum, equals, failedToInitialize, fieldByName, fields, getValue, getValues, hashCode, isAbstract, isFinal, isInitialized, isPrepared, isStatic, isVerified, locationsOfLine, locationsOfLine, methods, methodsByName, methodsByName, name, nestedTypes, sourceDebugExtension, sourceName, sourceNames, sourcePaths, visibleFields, visibleMethods
 
インタフェース com.sun.jdi.Type から継承したメソッド
signature
 
インタフェース com.sun.jdi.Mirror から継承したメソッド
toString, virtualMachine
 
インタフェース java.lang.Comparable から継承したメソッド
compareTo
 
インタフェース com.sun.jdi.Accessible から継承したメソッド
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
 

フィールドの詳細

INVOKE_SINGLE_THREADED

public static final int INVOKE_SINGLE_THREADED
呼び出し側のスレッドだけを再開してメソッドの呼び出しを実行します。

関連項目:
定数フィールド値
メソッドの詳細

superclass

public ClassType superclass()
このクラスのスーパークラスを取得します。

戻り値:
ターゲット VM 内のこのクラスのスーパークラスをミラー化する ClassType。このようなクラスが存在しない場合は null を返す

interfaces

public List interfaces()
このクラスにより直接実装されたインタフェースを取得します。このクラスの implements キーワードを使って宣言されたインタフェースだけが含まれます。

戻り値:
ターゲット VM 内のこの ClassType の直接のインタフェースをミラー化する InterfaceType オブジェクトのリスト。このようなオブジェクトが存在しない場合、長さゼロのリストを返す
例外:
ClassNotPreparedException - このクラスがまだ準備されていない場合

allInterfaces

public List allInterfaces()
このクラスにより直接的または間接的に実装されたインタフェースを取得します。interfaces() により返されるインタフェースは、すべてのスーパーインタフェースと同様に返されます。

戻り値:
ターゲット VM 内のこの ClassType のインタフェースをミラー化する InterfaceType オブジェクトのリスト。このようなオブジェクトが存在しない場合、長さゼロのリストを返す
例外:
ClassNotPreparedException - このクラスがまだ準備されていない場合

subclasses

public List subclasses()
現在ロードされている、このクラスの直接のサブクラスを取得します。このリストの順序は保証されません。

戻り値:
ターゲット VM 内のこのクラスのロードされたサブクラスをミラー化する ClassType オブジェクトのリスト。このようなクラスが存在しない場合、このメソッドは長さゼロのリストを返す

setValue

public void setValue(Field field,
                     Value value)
              throws InvalidTypeException,
                     ClassNotLoadedException
値を static フィールドに代入します。Field は、この ObjectReference に対して有効でなければなりません。つまり、このオブジェクトからフィールドの型への、ワイド型参照変換が行われる必要があります。フィールドは final であってはなりません。

オブジェクトの値は、このフィールドの型への代入互換性を持たなければなりません (これは、このフィールド型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ値は、このフィールドの型への代入互換性を持つか、情報を失わずにこのフィールドの型に変換できる必要があります。代入互換性の詳細は、Java 言語仕様のセクション 5.2 を参照してください。

パラメータ:
field - 設定するフィールド
value - 代入される値
例外:
IllegalArgumentException - フィールドが static ではない場合、フィールドが final である場合、またはフィールドがこのクラス内に存在しない場合
ClassNotLoadedException - フィールドの型が、適切なクラスローダによってロードされていない場合
InvalidTypeException - 値の型が宣言されたフィールド型と一致しない場合

invokeMethod

public Value invokeMethod(ThreadReference thread,
                          Method method,
                          List arguments,
                          int options)
                   throws InvalidTypeException,
                          ClassNotLoadedException,
                          IncompatibleThreadStateException,
                          InvocationException
ターゲット VM 内の指定された static Method を呼び出します。指定するメソッドは、このクラス内またはスーパークラス内で定義できます。このメソッドには static メソッドを指定できますが、static 初期化子を指定することはできません。新規オブジェクトの生成およびそのコンストラクタの実行には、newInstance(com.sun.jdi.ThreadReference, com.sun.jdi.Method, java.util.List, int) を使用します。

メソッドの呼び出しは、指定されたスレッド内で行われます。指定されたスレッドがそのスレッド内で発生したイベントにより中断される場合にのみ、メソッドの呼び出しを行います。ターゲット VM が VirtualMachine.suspend() を使って中断された場合、または指定されたスレッドが ThreadReference.suspend() を使って中断された場合、メソッドの呼び出しはサポートされません

指定されたメソッドは、指定された引数リスト内の引数を使って呼び出されます。メソッドの呼び出しは、同期をとられます。呼び出されたメソッドがターゲット VM で復帰するまで、このメソッドは復帰しません。 呼び出されたメソッドの戻り値の型が void 以外の型である場合、戻り値のミラーはこのメソッドによって返されます。それ以外の場合、null が返されます。呼び出されたメソッドが例外をスローする場合、このメソッドは、スローされた例外オブジェクトに対するミラーを含む InvocationException をスローします。

オブジェクト引数は、この引数型への代入互換性を持たなければなりません (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持つか、情報を失わずにこの引数型に変換できる必要があります。代入互換性の詳細は、Java 言語仕様のセクション 5.2 を参照してください。

デフォルトでは、ターゲット 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 初期化子のいずれかである場合
{@link - InvalidTypeException} 対応するメソッドの引数型に代入できない引数が引数リストにある場合
ClassNotLoadedException - 引数型が、適切なクラスローダによってロードされていない場合
IncompatibleThreadStateException - 指定されたスレッドが、イベントによって中断されていない場合
InvocationException - メソッドの呼び出しにより、ターゲット VM で例外が発生した場合
InvalidTypeException - 引数が以下の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要があります。代入互換性の詳細は、Java 言語仕様のセクション 5.2 を参照してください

newInstance

public ObjectReference newInstance(ThreadReference thread,
                                   Method method,
                                   List arguments,
                                   int options)
                            throws InvalidTypeException,
                                   ClassNotLoadedException,
                                   IncompatibleThreadStateException,
                                   InvocationException
ターゲット VM 内の指定されたコンストラクタ Method を使って、この型の新規インスタンスを生成します。指定するコンストラクタは、このクラス内で定義する必要があります。

指定されたスレッド内でインスタンスの生成が行われます。指定されたスレッドがそのスレッド内で発生したイベントによって中断された場合にだけ、インスタンスの生成は行われます。ターゲット VM が VirtualMachine.suspend() により中断された場合、または指定されたスレッドが ThreadReference.suspend() により中断された場合、インスタンスの生成はサポートされません。

指定されたコンストラクタは、指定された引数リスト内の引数を使って呼び出されます。呼び出しは同期をとられます。コンストラクタがターゲット VM 内で復帰するまで、このメソッドは復帰しません。呼び出されたメソッドが例外をスローする場合、このメソッドはスローされた例外オブジェクトに対するミラーを含む InvocationException をスローします。

オブジェクト引数は、この引数型への代入互換性を持たなければなりません (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持つか、情報を失わずにこの引数型に変換できる必要があります。代入互換性の詳細は、Java 言語仕様のセクション 5.2 を参照してください。

デフォルトでは、ターゲット VM 内のすべてのスレッドは、そのスレッドがイベントまたは VirtualMachine.suspend()ThreadReference.suspend() によって以前に中断された場合、メソッドの呼び出し中に再開されます。 これは、呼び出されたメソッドが必要とするモニターをいずれかのスレッドが所有する場合に発生するデッドロックを回避するために行われます。呼び出し中にブレークポイントまたは他のイベントが発生する可能性があります。 ただし、この暗黙の再開は、ThreadReference.resume() と同じように行われるため、スレッドの中断カウントが 1 を超える場合には、呼び出しの間、スレッドは中断状態になることに留意してください。デフォルトでは、呼び出しが完了すると、ターゲット VM 内のすべてのスレッドは、呼び出し前の状態に関係なく中断されます。

呼び出し中に他のスレッドが再開されるのを防止するには、options 引数に INVOKE_SINGLE_THREADED ビットフラグを指定します。ただし、このオプションでは、デッドロックを回避したり、デッドロックから回復することはできないので、慎重に使用する必要があります。指定されたスレッドだけが再開されます (すべてのスレッドは再開されない)。単一スレッド呼び出しの完了時には、呼び出し側 のスレッドは再度中断されます。単一スレッド呼び出し中に開始されたスレッドは、 その単一スレッド呼び出しの完了時には中断されません。

呼び出し中にターゲット VM が切断された (たとえば、VirtualMachine.dispose() によって) 場合でも、メソッドの呼び出しは続行されます。

パラメータ:
thread - 呼び出しを行うスレッド
method - 呼び出すコンストラクタ Method
arguments - 呼び出されるコンストラクタにバインドされた Value 引数のリスト。リストから取得した値は、コンストラクタシグニチャーに指定されている順序で引数に代入される
options - 整数ビットフラグオプション
戻り値:
新規に生成されたオブジェクトの ObjectReference ミラー
例外:
IllegalArgumentException - メソッドがこのクラスのメンバでない場合、引数リストのサイズがコンストラクタに対して宣言された引数の数に一致しない場合、またはメソッドがコンストラクタでない場合
{@link - InvalidTypeException} 対応するメソッドの引数型に代入できない引数が引数リストにある場合
ClassNotLoadedException - 引数型が、適切なクラスローダによってロードされていない場合
IncompatibleThreadStateException - 指定されたスレッドが、イベントによって中断されていない場合
InvocationException - メソッドの呼び出しにより、ターゲット VM で例外が発生した場合
InvalidTypeException - 引数が以下の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要があります。代入互換性の詳細は、Java 言語仕様のセクション 5.2 を参照してください

concreteMethodByName

public Method concreteMethodByName(String name,
                                   String signature)
指定された名前およびシグニチャーを持つこのクラスから認識可能な、単一の非 abstract 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