@Exported public interface StackFrame extends Mirror, Locatable
ThreadReference.frames()
を呼び出して取得できます。
StackFrameを使用して、メソッドの局所変数およびその現在の値にアクセスすることができます。
StackFrameには寿命があります。これは、スレッドが中断しているときにだけ使用でき、スレッドが再開されると無効になります。
ターゲットVMが切断されていて、VMDisconnectEvent
がEventQueue
から読み出されたか読出せる場合は、StackFrame
をパラメータとして取るStackFrame
上のメソッドはVMDisconnectedException
をスローします。
StackFrame
をパラメータとして取るStackFrame
上のメソッドは、ターゲットVMのメモリーが不足した場合にVMOutOfMemoryException
をスローします。
修飾子と型 | メソッドと説明 |
---|---|
List<Value> |
getArgumentValues()
このフレーム内のすべての引数の値を返します。
|
Value |
getValue(LocalVariable variable)
このフレームの
LocalVariable のValue を取得します。 |
Map<LocalVariable,Value> |
getValues(List<? extends LocalVariable> variables)
このフレーム内の複数の局所変数の値を返します。
|
Location |
location()
フレーム内の現在の命令の
Location を返します。 |
void |
setValue(LocalVariable variable, Value value)
このフレームの
LocalVariable のValue を設定します。 |
ObjectReference |
thisObject()
現在のフレームのthisの値を返します。
|
ThreadReference |
thread()
このフレームのメソッドが実行されているスレッドを返します。
|
LocalVariable |
visibleVariableByName(String name)
LocalVariable のうち、指定された名前と一致し、現在のフレーム位置で可視なものを検索します。 |
List<LocalVariable> |
visibleVariables()
このフレームの位置からアクセスできる各
LocalVariable を含むリストを返します。 |
toString, virtualMachine
Location location()
Location
を返します。このフレームを作成したメソッドには、返された位置からアクセスすることもできます。スタック内の最上位のフレームでは、次に実行される命令の位置を返します。その他のすべてのフレームでは、次のフレームのメソッドが呼出し元の命令の位置を返します。フレームがnativeメソッドの呼出しを表す場合は、返される位置はクラスとメソッドを示していますが、コード・インデックスは無効(-1)です。location
、インタフェース: Locatable
Location
。InvalidStackFrameException
- このスタック・フレームが無効になっている場合。フレームのスレッドが再開されると、スタック・フレームは無効になる。ThreadReference thread()
ThreadReference
。InvalidStackFrameException
- このスタック・フレームが無効になっている場合。フレームのスレッドが再開されると、スタック・フレームは無効になる。ObjectReference thisObject()
ObjectReference
は、非nativeのインスタンス・メソッドに対してだけ使用できます。ObjectReference
。フレームがnativeまたはstaticメソッドを表している場合はnull。InvalidStackFrameException
- このスタック・フレームが無効になっている場合。フレームのスレッドが再開されると、スタック・フレームは無効になる。List<LocalVariable> visibleVariables() throws AbsentInformationException
LocalVariable
を含むリストを返します。
可視性は、このStackFrameの現在の命令のコード・インデックスによって決定されます。各変数には、アクセスできるバイト・コード・インデックスの範囲が設定されています。スタック・フレームのメソッドと変数のメソッドが一致し、StackFrameのコード・インデックスが変数のバイト・コードの範囲内に存在する場合は、この変数にアクセスすることができます。
変数のバイト・コードの範囲は、変数のスコープ以下ですが、次の特定の環境ではスコープを超えることもできます。
LocalVariable
オブジェクトのリスト。可視変数がない場合は空のリスト。特に、nativeメソッド内のフレームは常に長さゼロのリストを返す。AbsentInformationException
- このメソッドのローカル変数情報がない場合。InvalidStackFrameException
- このスタック・フレームが無効になっている場合。フレームのスレッドが再開されると、スタック・フレームは無効になる。NativeMethodException
- 現在のメソッドがnativeの場合。LocalVariable visibleVariableByName(String name) throws AbsentInformationException
LocalVariable
のうち、指定された名前と一致し、現在のフレーム位置で可視なものを検索します。可視性については、visibleVariables()
を参照してください。name
- 検索する変数名LocalVariable
。指定された名前の可視変数がない場合はnull。nativeメソッド内のフレームは常にnullを返す。AbsentInformationException
- このメソッドのローカル変数情報がない場合。InvalidStackFrameException
- このスタック・フレームが無効になっている場合。フレームのスレッドが再開されると、スタック・フレームは無効になる。NativeMethodException
- 現在のメソッドがnativeの場合。Value getValue(LocalVariable variable)
variable
- アクセスするLocalVariable
Value
。IllegalArgumentException
- 変数がこのフレームのメソッドに対して無効な場合、または可視変数でない場合。InvalidStackFrameException
- このスタック・フレームが無効になっている場合。フレームのスレッドが再開されると、スタック・フレームは無効になる。Map<LocalVariable,Value> getValues(List<? extends LocalVariable> variables)
visibleVariables()
に記述されている規則に基づく可視変数である必要があります。variables
- アクセスするLocalVariable
オブジェクトのリストLocalVariable
とそのValue
を関連付けるマップIllegalArgumentException
- 任意の変数がこのフレームのメソッドに対して無効な場合、または可視変数でない場合。InvalidStackFrameException
- このスタック・フレームが無効になっている場合。フレームのスレッドが再開されると、スタック・フレームは無効になる。void setValue(LocalVariable variable, Value value) throws InvalidTypeException, ClassNotLoadedException
LocalVariable
のValue
を設定します。このフレームのメソッドに対して有効で、visibleVariables()
に記述されている規則に基づく可視変数である必要があります。
オブジェクトの値は、この変数の型への代入互換性を持たなければいけません(これは、この変数の型は、囲むクラスのクラス・ローダーによってロードする必要があることを意味する)。プリミティブ値は、この変数の型への代入互換性を持たなければいけません。つまり、情報を失わずにこの変数の型に変換できる必要があります。代入互換性の詳細は、JLSのセクション5.2を参照してください。
variable
- 要求された値を含むフィールドvalue
- 代入する新しい値IllegalArgumentException
- フィールドがこのオブジェクトのクラスにとって有効でない場合。InvalidTypeException
- 値の型が変数の型に一致しない場合。ClassNotLoadedException
- 変数の型が、適切なクラス・ローダーによってロードされていない場合。InvalidStackFrameException
- このスタック・フレームが無効になっている場合。フレームのスレッドが再開されると、スタック・フレームは無効になる。VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。List<Value> getArgumentValues()
Value
オブジェクトを含むリスト。引数は宣言された順に並べられる。このフレームに対応するメソッドが引数を持たない場合、空のリストが返される。InvalidStackFrameException
- このスタック・フレームが無効になっている場合。フレームのスレッドが再開されると、スタック・フレームは無効になる。
Copyright © 1999, 2017, Oracle and/or its affiliates. All rights reserved.