Интерфейс StackFrame
- Все суперинтерфейсы:
-
Locatable,Mirror
public interface StackFrame extends Mirror, Locatable
Состояние одного вызова метода в стеке вызовов потока. По мере выполнения потока кадры стека вызовов добавляются и удаляются из стека вызовов по мере вызова и возврата методов. Объект StackFrame отображает один такой кадр из целевой виртуальной машины в какой-то момент выполнения её потока. Стек вызовов представляет собой, соответственно, список объектов StackFrame. Стек вызовов можно получить в любой момент, когда поток приостановлен с помощью вызова ThreadReference.frames()
StackFrames предоставляют доступ к локальным переменным метода и их текущим значениям.
Жизненный цикл StackFrame ограничен. Он доступен только для приостановленных потоков и становится недействительным, как только поток возобновляется.
Любой метод в StackFrame , который принимает StackFrame в качестве параметра, может выбросить VMDisconnectedException, если целевая виртуальная машина отключена, и событие VMDisconnectEvent было или может быть прочитано из очереди событий EventQueue.
Любой метод в StackFrame , который принимает StackFrame в качестве параметра, может выбросить VMOutOfMemoryException, если в целевой виртуальной машине закончилась память.
- С момента:
- 1.3
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
List<Value> | getArgumentValues() | Возвращает значения всех аргументов в этом кадре. |
Value | getValue(LocalVariable variable) | Получает |
Map<LocalVariable,Value> | getValues(List<? extends LocalVariable> variables) | Возвращает значения нескольких локальных переменных в этом кадре. |
Location | location() | Возвращает |
void | setValue(LocalVariable variable,
Value value) | Устанавливает |
ObjectReference | thisObject() | Возвращает значение 'this' для текущего кадра. |
ThreadReference | thread() | Возвращает поток, в котором выполняется метод этого кадра. |
LocalVariable | visibleVariableByName(String name) | Ищет |
List<LocalVariable> | visibleVariables() | Возвращает список, содержащий каждый |
Методы, объявленные в интерфейсе com.sun.jdi.Mirror
toString, virtualMachine Методы
location
Location location()
Возвращает Location текущей инструкции в кадре. Также доступен метод, для которого был создан данный кадр, через возвращённую локацию. Для верхнего кадра в стеке эта локация определяет следующую инструкцию для выполнения. Для всех остальных кадров эта локация определяет инструкцию, вызвавшую следующий метод кадра. Если кадр представляет вызов нативного метода, возвращаемая локация указывает на класс и метод, но индекс кода не будет действительным (-1).
- Определено в:
-
locationв интерфейсеLocatable - Возвращает:
- локацию
Locationтекущей инструкции. - Имеет исключения:
-
InvalidStackFrameException- если этот стек-кадр стал недоступным. После возобновления потока кадра, стек-кадр больше недействителен.
thread
ThreadReference thread()
Возвращает поток, в рамках которого выполняется метод данного кадра.
- Возвращает:
- ссылку
ThreadReferenceна поток кадра. - Имеет исключения:
-
InvalidStackFrameException- если этот стек-кадр стал недоступным. После возобновления потока кадра, стек-кадр больше недействителен.
thisObject
ObjectReference thisObject()
Возвращает значение 'this' для текущего кадра. ObjectReference для 'this' доступен только для не-нативных методов экземпляров.
- Возвращает:
- объект
ObjectReference, или null, если кадр представляет нативный или статический метод. - Имеет исключения:
-
InvalidStackFrameException- если этот стек-кадр стал недоступным. После возобновления потока кадра, стек-кадр больше недействителен.
visibleVariables
List<LocalVariable> visibleVariables()
throws AbsentInformationException Возвращает список, содержащий каждый LocalVariable, доступный из текущей локации этого кадра.
Видимость основана на индексе кода текущей инструкции этого StackFrame. У каждой переменной есть диапазон индексов байткода, в котором она доступна. Если метод этого стека-кадра соответствует методу этой переменной, а индекс кода этого стека-кадра находится в диапазоне байткода переменной, переменная видима.
Диапазон байткода переменной по крайней мере такой же большой, как область видимости этой переменной, но может продолжаться за пределами конца области видимости в определённых обстоятельствах:
- компилятор/виртуальная машина не сразу повторно используют слот переменной.
- компилятор/виртуальная машина реализованы таким образом, чтобы сообщать расширенный диапазон, который возникнет из пункта выше.
- Возвращает:
- список объектов
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)
Получает Value LocalVariable в этом кадре. Переменная должна быть действительной для метода этого кадра и видимой в соответствии с правилами, описанными в 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 LocalVariable в этом кадре. Переменная должна быть действительной для метода этого кадра и видимой в соответствии с правилами, описанными в visibleVariables().
Значения объектов должны быть совместимы с типом переменной (Это подразумевает, что тип переменной должен быть загружен через загрузчик классов содержащего класса). Значения примитивных типов должны быть либо совместимы с типом переменной, либо должны быть преобразуемы в тип переменной без потери информации. См. раздел JLS 5.2 для получения дополнительной информации о совместимости присваивания.
- Параметры:
-
variable- поле, содержащее запрашиваемое значение -
value- новое значение для присваивания - Имеет исключения:
-
IllegalArgumentException- если поле недействительно для класса этого объекта. -
InvalidTypeException- если тип значения не соответствует типу переменной. -
ClassNotLoadedException- если тип переменной ещё не загружен через соответствующий загрузчик классов. -
InvalidStackFrameException- если этот стек-кадр стал недоступным. После возобновления потока кадра, стек-кадр больше недействителен. -
VMCannotBeModifiedException- если VirtualMachine является только для чтения - см.VirtualMachine.canBeModified().
getArgumentValues
List<Value> getArgumentValues()
Возвращает значения всех аргументов в этом кадре. Значения возвращаются, даже если информация о локальных переменных отсутствует.
- Возвращает:
- список, содержащий объект
Valueдля каждого аргумента этого кадра, в порядке объявления аргументов. Если у метода, соответствующего этому кадру, нет аргументов, возвращается пустой список. - Имеет исключения:
-
InvalidStackFrameException- если этот стек-кадр стал недоступным. После возобновления потока кадра, стек-кадр больше недействителен. - C момента:
- 1.6
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/jdk.jdi/com/sun/jdi/StackFrame.html