-
public interface StackFrame extends Mirror, Locatable
线程调用堆栈上的一个方法调用的状态。 当线程执行时,在调用方法然后返回时,会从其调用堆栈中推送和弹出堆栈帧。 StackFrame在其线程执行的某个点处镜像来自目标VM的一个这样的帧。 那么,调用堆栈只是一个StackFrame对象列表。 只要通过调用ThreadReference.frames()
暂停线程,就可以获得调用堆栈StackFrames提供对方法的局部变量及其当前值的访问。
StackFrame的生命周期非常有限。 它仅适用于挂起的线程,并在其线程恢复后变为无效。
上的任何方法
StackFrame
这需要StackFrame
作为参数可能抛出VMDisconnectedException
如果目标VM断开且VMDisconnectEvent
从所读出的已被或可EventQueue
。如果目标VM内存
StackFrame
,StackFrame
上的任何方法(如果参数为StackFrame)可能会抛出VMOutOfMemoryException
。- 从以下版本开始:
- 1.3
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 List<Value>
getArgumentValues()
返回此框架中所有参数的值。Value
getValue(LocalVariable variable)
Map<LocalVariable,Value>
getValues(List<? extends LocalVariable> variables)
返回此框架中多个局部变量的值。Location
location()
返回帧中当前指令的Location
。void
setValue(LocalVariable variable, Value value)
在此框架中设置LocalVariable
的5228736030371 。ObjectReference
thisObject()
返回当前帧的'this'值。ThreadReference
thread()
返回运行此框架方法的线程。LocalVariable
visibleVariableByName(String name)
查找与给定名称匹配的LocalVariable
,并且在当前帧位置可见。List<LocalVariable>
visibleVariables()
返回包含可从此框架位置访问的每个LocalVariable
的列表。-
声明方法的接口 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)
获取此框架中5228736632285的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
在此框架中设置Value
的52287368764451 。 该变量必须对此框架的方法有效,并且根据visibleVariables()
中描述的规则可见。对象值必须与变量类型兼容(这意味着必须通过封闭类的类加载器加载变量类型)。 原始值必须是与变量类型兼容的赋值,或者必须可转换为变量类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。
- 参数
-
variable
- 包含请求值的字段 -
value
- 要分配的新值 - 异常
-
IllegalArgumentException
- 如果该字段对此对象的类无效。 -
InvalidTypeException
- 如果值的类型与变量的类型不匹配。 -
ClassNotLoadedException
- 如果尚未通过适当的类加载器加载变量类型。 -
InvalidStackFrameException
- 如果此堆栈帧已变为无效。 一旦帧的线程恢复,堆栈帧就不再有效。 -
VMCannotBeModifiedException
- 如果VirtualMachine是只读的 - 请参阅VirtualMachine.canBeModified()
。
-
getArgumentValues
List<Value> getArgumentValues()
返回此框架中所有参数的值。 即使没有本地变量信息,也会返回值。- 结果
-
包含该帧的每个参数的
Value
对象的列表,按参数声明的顺序排列。 如果与此框架对应的方法没有参数,则返回空列表。 - 异常
-
InvalidStackFrameException
- 如果此堆栈帧已变为无效。 一旦帧的线程恢复,堆栈帧就不再有效。 - 从以下版本开始:
- 1.6
-
-