モジュール jdk.jdi
パッケージ com.sun.jdi

インタフェースStackFrame

  • すべてのスーパー・インタフェース:
    Locatable, Mirror


    public interface StackFrame
    extends Mirror, Locatable
    スレッドの呼出しスタック上での、特定のメソッド呼出しの状態です。 スレッドの実行中にスタック・フレームのプッシュとポップが行われますが、この処理はメソッドが呼び出されてから復帰するまでに呼出しスタックから行われます。 StackFrameは、スレッドの実行時の特定の時点に、ターゲットVMのスタック・フレームをミラー化します。 つまり、呼出しスタックはStackFrameオブジェクトのListになります。 呼出しスタックは、スレッドが中断している間はThreadReference.frames()を呼び出して取得できます。

    StackFrameを使用して、メソッドの局所変数およびその現在の値にアクセスすることができます。

    StackFrameには寿命があります。 これは、スレッドが中断しているときにだけ使用でき、スレッドが再開されると無効になります。

    ターゲットVMが切断されていて、VMDisconnectEventEventQueueから読み出されたか読出せる場合は、StackFrameをパラメータとして取るStackFrame上のメソッドはVMDisconnectedExceptionをスローします。

    StackFrameをパラメータとして取るStackFrame上のメソッドは、ターゲットVMのメモリーが不足した場合にVMOutOfMemoryExceptionをスローします。

    導入されたバージョン:
    1.3
    • メソッドの詳細

      • location

        Location location​()
        フレーム内の現在の命令のLocationを返します。 このフレームを作成したメソッドには、返された位置からアクセスすることもできます。 スタック内の最上位のフレームでは、次に実行される命令の位置を返します。 その他のすべてのフレームでは、次のフレームのメソッドが呼出し元の命令の位置を返します。 フレームがnativeメソッドの呼出しを表す場合は、返される位置はクラスとメソッドを示していますが、コード・インデックスは無効(-1)です。
        定義:
        location 、インタフェース: Locatable
        戻り値:
        現在の命令のLocation
        例外:
        InvalidStackFrameException - このスタック・フレームが無効になっている場合。 フレームのスレッドが再開されると、スタック・フレームは無効になる。
      • thread

        ThreadReference thread​()
        このフレームのメソッドが実行されているスレッドを返します。
        戻り値:
        フレームのスレッドをミラー化するThreadReference
        例外:
        InvalidStackFrameException - このスタック・フレームが無効になっている場合。 フレームのスレッドが再開されると、スタック・フレームは無効になる。
      • thisObject

        ObjectReference thisObject​()
        現在のフレームのthisの値を返します。 thisのObjectReferenceは、非nativeのインスタンス・メソッドに対してだけ使用できます。
        戻り値:
        ObjectReference。フレームがnativeまたはstaticメソッドを表している場合はnull。
        例外:
        InvalidStackFrameException - このスタック・フレームが無効になっている場合。 フレームのスレッドが再開されると、スタック・フレームは無効になる。
      • visibleVariables

        List<LocalVariable> visibleVariables​()
                                      throws AbsentInformationException
        このフレームの位置からアクセスできる各LocalVariableを含むリストを返します。

        可視性は、このStackFrameの現在の命令のコード・インデックスによって決定されます。 各変数には、アクセスできるバイト・コード・インデックスの範囲が設定されています。 スタック・フレームのメソッドと変数のメソッドが一致し、StackFrameのコード・インデックスが変数のバイト・コードの範囲内に存在する場合は、この変数にアクセスすることができます。

        変数のバイト・コードの範囲は、変数のスコープ以下ですが、次の特定の環境ではスコープを超えることもできます。

        • コンパイラとVMがただちに変数のスロットを再利用しない。
        • 上記の結果により拡張した範囲を報告するように、コンパイラとVMが実装されている。
        範囲を拡張すると、最近終了したスコープ内の変数を引き続き検査することができます。これは特に、ループ・インデックスの場合に便利です。 範囲を拡張した結果、現在のフレーム位置が同じ名前の複数のローカル変数の範囲に含まれている場合は、返されるリストでは、範囲の開始位置がもっとも大きい変数が選択されています。
        戻り値:
        現在アクセス可能なLocalVariableオブジェクトのリスト。可視変数がない場合は空のリスト。特に、nativeメソッド内のフレームは常に長さゼロのリストを返す。
        例外:
        AbsentInformationException - このメソッドのローカル変数情報がない場合。
        InvalidStackFrameException - このスタック・フレームが無効になっている場合。 フレームのスレッドが再開されると、スタック・フレームは無効になる。
        NativeMethodException - 現在のメソッドがnativeの場合。
      • visibleVariableByName

        LocalVariable visibleVariableByName​(String name)
                                     throws AbsentInformationException
        LocalVariableのうち、指定された名前と一致し、現在のフレーム位置で可視なものを検索します。 可視性については、visibleVariables()を参照してください。
        パラメータ:
        name - 検索する変数名
        戻り値:
        一致するLocalVariable。指定された名前の可視変数がない場合はnull。nativeメソッド内のフレームは常にnullを返す。
        例外:
        AbsentInformationException - このメソッドのローカル変数情報がない場合。
        InvalidStackFrameException - このスタック・フレームが無効になっている場合。 フレームのスレッドが再開されると、スタック・フレームは無効になる。
        NativeMethodException - 現在のメソッドがnativeの場合。
      • getValue

        Value getValue​(LocalVariable variable)
        このフレームのLocalVariableValueを取得します。 このフレームのメソッドに対して有効で、visibleVariables()に記述されている規則に基づく可視変数である必要があります。
        パラメータ:
        variable - アクセスするLocalVariable
        戻り値:
        インスタンス・フィールドのValue
        例外:
        IllegalArgumentException - 変数がこのフレームのメソッドに対して無効な場合、または可視変数でない場合。
        InvalidStackFrameException - このスタック・フレームが無効になっている場合。 フレームのスレッドが再開されると、スタック・フレームは無効になる。
      • getValues

        Map<LocalVariable,Value> getValues​(List<? extends LocalVariable> variables)
        このフレーム内の複数の局所変数の値を返します。 各変数が、このフレームのメソッドに対して有効で、visibleVariables()に記述されている規則に基づく可視変数である必要があります。
        パラメータ:
        variables - アクセスするLocalVariableオブジェクトのリスト
        戻り値:
        LocalVariableとそのValueを関連付けるマップ
        例外:
        IllegalArgumentException - 任意の変数がこのフレームのメソッドに対して無効な場合、または可視変数でない場合。
        InvalidStackFrameException - このスタック・フレームが無効になっている場合。 フレームのスレッドが再開されると、スタック・フレームは無効になる。
      • setValue

        void setValue​(LocalVariable variable,
                      Value value)
               throws InvalidTypeException,
                      ClassNotLoadedException
        このフレームのLocalVariableValueを設定します。 このフレームのメソッドに対して有効で、visibleVariables()に記述されている規則に基づく可視変数である必要があります。

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

        パラメータ:
        variable - 要求された値を含むフィールド
        value - 代入する新しい値
        例外:
        IllegalArgumentException - フィールドがこのオブジェクトのクラスにとって有効でない場合。
        InvalidTypeException - 値の型が変数の型に一致しない場合。
        ClassNotLoadedException - 変数の型が、適切なクラス・ローダーによってロードされていない場合。
        InvalidStackFrameException - このスタック・フレームが無効になっている場合。 フレームのスレッドが再開されると、スタック・フレームは無効になる。
        VMCannotBeModifiedException - VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()を参照)。
      • getArgumentValues

        List<Value> getArgumentValues​()
        このフレーム内のすべての引数の値を返します。 ローカル変数情報がない場合も、値が返されます。
        戻り値:
        このフレームの各引数のValueオブジェクトを含むリスト。引数は宣言された順に並べられる。 このフレームに対応するメソッドが引数を持たない場合、空のリストが返される。
        例外:
        InvalidStackFrameException - このスタック・フレームが無効になっている場合。 フレームのスレッドが再開されると、スタック・フレームは無効になる。
        導入されたバージョン:
        1.6