模块  jdk.jdi
软件包  com.sun.jdi

Interface StackFrame

  • All Superinterfaces:
    LocatableMirror

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

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

    StackFrame的生命周期非常有限。 它仅适用于挂起的线程,并在其线程恢复后变为无效。

    上的任何方法StackFrame这需要StackFrame作为参数可能抛出VMDisconnectedException如果目标VM断开且VMDisconnectEvent从所读出的已被或可EventQueue

    如果目标VM内存StackFrameStackFrame上的任何方法(如果参数为StackFrame)可能会抛出VMOutOfMemoryException

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

      • location

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

        List<LocalVariable> visibleVariables()
                                      throws AbsentInformationException
        返回包含可从此框架位置访问的每个LocalVariable的列表。

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

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

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

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