-
public interface StackFrame extends Mirror, Locatable
线程调用堆栈上的一种方法调用的状态。 当一个线程执行时,堆栈帧被调用堆栈的方式被推送并弹出,因为方法被调用然后返回。 StackFrame在其线程的执行中的某个时刻从目标VM镜像一个这样的帧。 那么调用堆栈就是一个StackFrame对象列表。 只要通过调用ThreadReference.frames()
暂停线程,就可以获得调用堆栈StackFrames提供对方法局部变量及其当前值的访问。
StackFrame的使用寿命非常有限。 它仅适用于挂起的线程,一旦线程被恢复,它就变得无效。
StackFrame
以StackFrame
作为参数的任何方法可能会导致VMDisconnectedException
如果目标VM断开,并且VMDisconnectEvent
已经或可用于从EventQueue
读取。如果目标虚拟机内存
StackFrame
,则StackFrame
作为参数的方法可能会抛出VMOutOfMemoryException
。- 从以下版本开始:
- 1.3
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 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
的列表。-
Methods inherited from interface com.sun.jdi.Mirror
toString, virtualMachine
-
-
-
-
方法详细信息
-
location
Location location()
返回帧中当前指令的Location
。 创建此框架的方法也可以通过返回的位置进行访问。 对于堆栈中的顶部框架,此位置标识要执行的下一条指令。 对于所有其他帧,此位置标识导致下一帧的方法被调用的指令。 如果框架表示本地方法调用,则返回的位置指示类和方法,但代码索引将不会有效(-1)。- Specified by:
-
location
在接口Locatable
- 结果
-
目前的指令为
Location
。 - 异常
-
InvalidStackFrameException
- 如果此堆栈帧已经无效。 一旦框架的线程恢复,堆栈框架将不再有效。
-
thread
ThreadReference thread()
返回运行此框架的方法的线程。- 结果
-
一个
ThreadReference
镜像框架的线程。 - 异常
-
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
- 如果当前方法是本机的。
-
visibleVariableByName
LocalVariable visibleVariableByName(String name) throws AbsentInformationException
找到匹配给定名称的LocalVariable
,并在当前帧位置可见。 详情请见visibleVariables()
。- 参数
-
name
- 要查找的变量名 - 结果
-
匹配
LocalVariable
,如果没有给定名称的可见变量,则为null; 本机方法中的帧始终返回null。 - 异常
-
AbsentInformationException
- 如果此方法没有本地变量信息。 -
InvalidStackFrameException
- 如果此堆栈帧已经无效。 一旦框架的线程恢复,堆栈框架将不再有效。 -
NativeMethodException
- 如果当前方法是本机的。
-
getValue
Value getValue(LocalVariable variable)
获取此框架中的LocalVariable
的Value
。 该变量必须对此框架的方法有效,并且根据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
在这个框架中设置LocalVariable
的Value
。 该变量必须对该框架的方法有效,并且根据visibleVariables()
中描述的规则可见。对象值必须与变量类型分配兼容(这意味着变量类型必须通过封闭类的加载器加载)。 原始值必须是与变量类型兼容的分配,或必须可转换为变量类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。
- 参数
-
variable
- 包含请求值的字段 -
value
- 要分配的新值 - 异常
-
IllegalArgumentException
- 如果该字段对此对象的类无效。 -
InvalidTypeException
- 如果值的类型与变量的类型不匹配。 -
ClassNotLoadedException
- 如果变量类型尚未通过适当的类加载器加载。 -
InvalidStackFrameException
- 如果此堆栈帧已经无效。 一旦框架的线程恢复,堆栈框架将不再有效。 -
VMCannotBeModifiedException
- 如果VirtualMachine是只读的 - 请参阅VirtualMachine.canBeModified()
。
-
getArgumentValues
List<Value> getArgumentValues()
返回此框架中所有参数的值。 即使没有局部变量信息,也返回值。- 结果
-
一个列表,其中包含一个
Value
对象,用于该框架的每个参数,按声明的参数顺序。 如果与此框架相对应的方法没有参数,则返回空列表。 - 异常
-
InvalidStackFrameException
- 如果此堆栈帧已经无效。 一旦框架的线程恢复,堆栈框架将不再有效。 - 从以下版本开始:
- 1.6
-
-