Интерфейс StackFrame
- Все суперинтерфейсы:
-
Locatable,Mirror
public interface StackFrame extends Mirror, Locatable
ThreadReference.frames() Объекты StackFrame обеспечивают доступ к локальным переменным метода и их текущим значениям.
Жизненный цикл объекта StackFrame очень ограничен. Он доступен только для приостановленных потоков и становится недоступным после возобновления потока.
Любой метод в StackFrame который принимает StackFrame в качестве параметра может выбросить исключение VMDisconnectedException, если целевая виртуальная машина отключена, и событие VMDisconnectEvent было или будет доступно для чтения из очереди событий EventQueue.
Любой метод в StackFrame который принимает StackFrame в качестве параметра может выбросить исключение VMOutOfMemoryException, если у целевой виртуальной машины закончилась память.
- С тех пор:
- 1.3
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
List |
getArgumentValues() |
Возвращает значения всех аргументов в этом кадре. |
Value |
getValue |
Получает Value LocalVariable в этом кадре. |
Map |
getValues |
Возвращает значения нескольких локальных переменных в этом кадре. |
Location |
location() |
Возвращает Location текущей инструкции в кадре. |
void |
setValue |
Устанавливает Value LocalVariable в этом кадре. |
ObjectReference |
thisObject() |
Возвращает значение 'this' для текущего кадра. |
ThreadReference |
thread() |
Возвращает поток, в котором выполняется метод этого кадра. |
LocalVariable |
visibleVariableByName |
Находит LocalVariable, соответствующую заданному имени и видимую в текущем месте кадра. |
List |
visibleVariables() |
Возвращает список, содержащий каждую LocalVariable, к которой можно получить доступ из местоположения этого кадра. |
Методы, объявленные в интерфейсе com.sun.jdi.Mirror
toString, virtualMachine
Подробное описание методов
location
Location location()
Location текущей инструкции в кадре. Метод, для которого был создан этот кадр, также доступен через возвращённую локацию. Для верхнего кадра в стеке эта локация определяет следующую выполняемую инструкцию. Для всех остальных кадров эта локация определяет инструкцию, которая вызвала метод следующего кадра. Если кадр представляет вызов нативного метода, возвращаемая локация указывает на класс и метод, но индекс кода не будет действительным (-1).- Указано в:
-
locationв интерфейсеLocatable - Возвращает:
- локацию
Locationтекущей инструкции. - Бросает:
-
InvalidStackFrameException- если этот стек-кадр стал недоступным. После возобновления потока кадра стек-кадр больше недоступен.
thread
ThreadReference thread()
- Возвращает:
- объект
ThreadReference, отражающий поток кадра. - Бросает:
-
InvalidStackFrameException- если этот стек-кадр стал недоступным. После возобновления потока кадра стек-кадр больше недоступен.
thisObject
ObjectReference thisObject()
ObjectReference для 'this' доступен только для не-нативных методов экземпляров.- Возвращает:
- объект
ObjectReference, или null, если кадр представляет собой нативный или статический метод. - Бросает:
-
InvalidStackFrameException- если этот стек-кадр стал недоступным. После возобновления потока кадра стек-кадр больше недоступен.
visibleVariables
List<LocalVariable> visibleVariables() throws AbsentInformationException
LocalVariable, доступный из местоположения этого кадра. Видимость основана на индексе кода текущей инструкции этого StackFrame. Каждая переменная имеет диапазон индексов байткода, в котором она доступна. Если метод этого стек-кадра совпадает с методом этой переменной, и индекс кода этого 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- если этот стек-кадр стал недоступным. После возобновления потока кадра стек-кадр больше недоступен. -
OpaqueFrameException- если этот кадр находится в стеке вызовов приостановленного виртуального потока, и целевая виртуальная машина не поддерживает установку значения локальных переменных в этом кадре. -
VMCannotBeModifiedException- если VirtualMachine является только для чтения. - См. также:
getArgumentValues
List<Value> getArgumentValues()
- Возвращает:
- список, содержащий объект
Valueдля каждого аргумента этого кадра в порядке объявления аргументов. Если метод, соответствующий этому кадру, не имеет аргументов, возвращается пустой список. - Бросает:
-
InvalidStackFrameException- если этот стек-кадр стал недоступным. После возобновления потока кадра стек-кадр больше недоступен. - С:
- 1.6
© 1993, 2023, 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/21/docs/api/jdk.jdi/com/sun/jdi/StackFrame.html