Module  jdk.jdi
软件包  com.sun.jdi

Interface StackFrame

  • All Superinterfaces:
    LocatableMirror


    public interface StackFrame
    extends Mirror, Locatable
    线程调用堆栈上的一种方法调用的状态。 当一个线程执行时,堆栈帧被调用堆栈的方式被推送并弹出,因为方法被调用然后返回。 StackFrame在其线程的执行中的某个时刻从目标VM镜像一个这样的帧。 那么调用堆栈就是一个StackFrame对象列表。 只要通过调用ThreadReference.frames()暂停线程,就可以获得调用堆栈

    StackFrames提供对方法局部变量及其当前值的访问。

    StackFrame的使用寿命非常有限。 它仅适用于挂起的线程,一旦线程被恢复,它就变得无效。

    StackFrameStackFrame作为参数的任何方法可能会导致VMDisconnectedException如果目标VM断开,并且VMDisconnectEvent已经或可用于从EventQueue读取。

    如果目标虚拟机内存StackFrame ,则StackFrame作为参数的方法可能会抛出VMOutOfMemoryException

    从以下版本开始:
    1.3
    • 方法详细信息

      • location

        Location location​()
        返回帧中当前指令的Location 创建此框架的方法也可以通过返回的位置进行访问。 对于堆栈中的顶部框架,此位置标识要执行的下一条指令。 对于所有其他帧,此位置标识导致下一帧的方法被调用的指令。 如果框架表示本地方法调用,则返回的位置指示类和方法,但代码索引将不会有效(-1)。
        Specified by:
        location在接口 Locatable
        结果
        目前的指令为Location
        异常
        InvalidStackFrameException - 如果此堆栈帧已经无效。 一旦框架的线程恢复,堆栈框架将不再有效。
      • thisObject

        ObjectReference thisObject​()
        返回当前帧的“this”值。 “this”的ObjectReference仅适用于非本地实例方法。
        结果
        一个ObjectReference ,如果框架表示一个本机或静态方法,则返回null。
        异常
        InvalidStackFrameException - 如果此堆栈帧已经无效。 一旦框架的线程恢复,堆栈框架将不再有效。
      • visibleVariables

        List<LocalVariable> visibleVariables​()
                                      throws AbsentInformationException
        返回一个列表,其中包含可以从此框架的位置访问的每个LocalVariable

        可见性基于此StackFrame的当前指令的代码索引。 每个变量都具有可访问的字节码索引的范围。 如果此堆栈框架的方法与此变量的方法匹配,并且如果此StackFrame的代码索引在变量的字节代码范围内,则该变量是可见的。

        变量的字节代码范围至少与该变量的范围一样大,但在特定情况下可以继续超出范围的结尾:

        • 编译器/ VM不会立即重用变量的插槽。
        • 实现编译器/ VM报告上述项目产生的扩展范围。
        扩展范围的优点是最近退出的范围的变量可能仍然可用于检查(这对循环索引尤其有用)。 如果作为上述扩展的结果,当前帧位置包含在同名的多个局部变量的范围内,则为返回的列表选择具有最高起始范围的变量。
        结果
        目前可见的LocalVariable对象的列表; 如果没有可见变量,列表将为空; 具体来说,本机方法中的帧将始终返回零长度列表。
        异常
        AbsentInformationException - 如果此方法没有本地变量信息。
        InvalidStackFrameException - 如果此堆栈帧已经无效。 一旦框架的线程恢复,堆栈框架将不再有效。
        NativeMethodException - 如果当前方法是本机的。
      • getArgumentValues

        List<Value> getArgumentValues​()
        返回此框架中所有参数的值。 即使没有局部变量信息,也返回值。
        结果
        一个列表,其中包含一个Value对象,用于该框架的每个参数,按声明的参数顺序。 如果与此框架相对应的方法没有参数,则返回空列表。
        异常
        InvalidStackFrameException - 如果此堆栈帧已经无效。 一旦框架的线程恢复,堆栈框架将不再有效。
        从以下版本开始:
        1.6