Java Debug Interface

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

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

public interface ClassType
extends ReferenceType

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

導入されたバージョン:
1.3
関連項目:
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.ReferenceType から継承されたメソッド
allFields, allLineLocations, allLineLocations, allMethods, availableStrata, classLoader, classObject, constantPool, constantPoolCount, defaultStratum, equals, failedToInitialize, fieldByName, fields, genericSignature, getValue, getValues, hashCode, instances, isAbstract, isFinal, isInitialized, isPrepared, isStatic, isVerified, locationsOfLine, locationsOfLine, majorVersion, methods, methodsByName, methodsByName, minorVersion, 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

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

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

superclass

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

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

interfaces

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

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

allInterfaces

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

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

subclasses

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

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

isEnum

boolean isEnum()
このクラスが enum として宣言されたかどうかを判定します。

戻り値:
このクラスが enum として宣言されている場合は true、そうでない場合は false。

setValue

void setValue(Field field,
              Value value)
              throws InvalidTypeException,
                     ClassNotLoadedException
値を static フィールドに代入します。Field は、この ClassType に対して有効である必要があります。つまり、ミラー化されたオブジェクトのクラスのフィールドであるか、そのクラスのスーパークラスのフィールドである必要があります。フィールドは final であってはいけません。

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

パラメータ:
field - 設定するフィールド
value - 代入される値
例外:
IllegalArgumentException - フィールドが static ではない場合、フィールドが final である場合、またはフィールドがこのクラス内に存在しない場合。
ClassNotLoadedException - フィールドの型が、適切なクラスローダーによってロードされていない場合。
InvalidTypeException - 値の型が宣言されたフィールド型と一致しない場合。
VMCannotBeModifiedException - VirtualMachine が読み取り専用の場合 (VirtualMachine.canBeModified() を参照)。

invokeMethod

Value invokeMethod(ThreadReference thread,
                   Method method,
                   List<? extends Value> 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 で復帰するまで、このメソッドは復帰しません。呼び出されたメソッドが例外をスローする場合、このメソッドはスローされた例外オブジェクトに対するミラーを含む 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() を参照)。

newInstance

ObjectReference newInstance(ThreadReference thread,
                            Method method,
                            List<? extends Value> arguments,
                            int options)
                            throws InvalidTypeException,
                                   ClassNotLoadedException,
                                   IncompatibleThreadStateException,
                                   InvocationException
ターゲット VM 内の指定されたコンストラクタの 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() を参照)。

concreteMethodByName

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