@Exported public interface StackFrame extends Mirror, Locatable
ThreadReference.frames()
StackFrames provide access to a method's local variables and their current values.
The lifetime of a StackFrame is very limited. It is available only for suspended threads and becomes invalid once its thread is resumed.
Any method on StackFrame
which
takes StackFrame
as an parameter may throw
VMDisconnectedException
if the target VM is
disconnected and the VMDisconnectEvent
has been or is
available to be read from the EventQueue
.
Any method on StackFrame
which
takes StackFrame
as an parameter may throw
VMOutOfMemoryException
if the target VM has run out of memory.
Modifier and Type | Method and Description |
---|---|
List<Value> |
getArgumentValues()
Returns the values of all arguments in this frame.
|
Value |
getValue(LocalVariable variable)
Gets the
Value of a LocalVariable in this frame. |
Map<LocalVariable,Value> |
getValues(List<? extends LocalVariable> variables)
Returns the values of multiple local variables in this frame.
|
Location |
location()
Returns the
Location of the current instruction in the frame. |
void |
setValue(LocalVariable variable,
Value value)
Sets the
Value of a LocalVariable in this frame. |
ObjectReference |
thisObject()
Returns the value of 'this' for the current frame.
|
ThreadReference |
thread()
Returns the thread under which this frame's method is running.
|
LocalVariable |
visibleVariableByName(String name)
Finds a
LocalVariable that matches the given name and is
visible at the current frame location. |
List<LocalVariable> |
visibleVariables()
Returns a list containing each
LocalVariable
that can be accessed from this frame's location. |
toString, virtualMachine
Location location()
Location
of the current instruction in the frame.
The method for which this frame was created can also be accessed
through the returned location.
For the top frame in the stack, this location identifies the
next instruction to be executed. For all other frames, this
location identifies the instruction that caused the next frame's
method to be invoked.
If the frame represents a native method invocation, the returned
location indicates the class and method, but the code index will
not be valid (-1).location
in interface Locatable
Location
of the current instruction.InvalidStackFrameException
- if this stack frame has become
invalid. Once the frame's thread is resumed, the stack frame is
no longer valid.ThreadReference thread()
ThreadReference
which mirrors the frame's thread.InvalidStackFrameException
- if this stack frame has become
invalid. Once the frame's thread is resumed, the stack frame is
no longer valid.ObjectReference thisObject()
ObjectReference
for 'this' is only available for
non-native instance methods.ObjectReference
, or null if the frame represents
a native or static method.InvalidStackFrameException
- if this stack frame has become
invalid. Once the frame's thread is resumed, the stack frame is
no longer valid.List<LocalVariable> visibleVariables() throws AbsentInformationException
LocalVariable
that can be accessed from this frame's location.
Visibility is based on the code index of the current instruction of this StackFrame. Each variable has a range of byte code indices in which it is accessible. If this stack frame's method matches this variable's method and if the code index of this StackFrame is within the variable's byte code range, the variable is visible.
A variable's byte code range is at least as large as the scope of that variable, but can continue beyond the end of the scope under certain circumstances:
LocalVariable
objects currently visible;
the list will be empty if there are no visible variables;
specifically, frames in native methods will always return a
zero-length list.AbsentInformationException
- if there is no local variable
information for this method.InvalidStackFrameException
- if this stack frame has become
invalid. Once the frame's thread is resumed, the stack frame is
no longer valid.NativeMethodException
- if the current method is native.LocalVariable visibleVariableByName(String name) throws AbsentInformationException
LocalVariable
that matches the given name and is
visible at the current frame location.
See visibleVariables()
for more information on visibility.name
- the variable name to findLocalVariable
, or null if there is no
visible variable with the given name; frames in native methods
will always return null.AbsentInformationException
- if there is no local variable
information for this method.InvalidStackFrameException
- if this stack frame has become
invalid. Once the frame's thread is resumed, the stack frame is
no longer valid.NativeMethodException
- if the current method is native.Value getValue(LocalVariable variable)
Value
of a LocalVariable
in this frame.
The variable must be valid for this frame's method and visible
according to the rules described in visibleVariables()
.variable
- the LocalVariable
to be accessedValue
of the instance field.IllegalArgumentException
- if the variable is
either invalid for this frame's method or not visible.InvalidStackFrameException
- if this stack frame has become
invalid. Once the frame's thread is resumed, the stack frame is
no longer valid.Map<LocalVariable,Value> getValues(List<? extends LocalVariable> variables)
visibleVariables()
.variables
- a list of LocalVariable
objects to be accessedLocalVariable
with
its Value
IllegalArgumentException
- if any variable is
either invalid for this frame's method or not visible.InvalidStackFrameException
- if this stack frame has become
invalid. Once the frame's thread is resumed, the stack frame is
no longer valid.void setValue(LocalVariable variable, Value value) throws InvalidTypeException, ClassNotLoadedException
Value
of a LocalVariable
in this frame.
The variable must be valid for this frame's method and visible
according to the rules described in visibleVariables()
.
Object values must be assignment compatible with the variable type (This implies that the variable type must be loaded through the enclosing class's class loader). Primitive values must be either assignment compatible with the variable type or must be convertible to the variable type without loss of information. See JLS section 5.2 for more information on assignment compatibility.
variable
- the field containing the requested valuevalue
- the new value to assignIllegalArgumentException
- if the field is not valid for
this object's class.InvalidTypeException
- if the value's type does not match
the variable's type.ClassNotLoadedException
- if the variable type has not yet been loaded
through the appropriate class loader.InvalidStackFrameException
- if this stack frame has become
invalid. Once the frame's thread is resumed, the stack frame is
no longer valid.VMCannotBeModifiedException
- if the VirtualMachine is read-only - see VirtualMachine.canBeModified()
.List<Value> getArgumentValues()
Value
object for each argument
to this frame, in the order in which the arguments were
declared. If the method corresponding to this frame has
no arguments, an empty list is returned.InvalidStackFrameException
- if this stack frame has become
invalid. Once the frame's thread is resumed, the stack frame is
no longer valid.
Copyright © 1999, 2021, Oracle and/or its affiliates. All rights reserved.