Spec-Zone.ru › OpenJDK 24

Интерфейс 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)
Получает Value LocalVariable в этом кадре.
Map<LocalVariable, Value> getValues(List<? extends LocalVariable> variables)
Возвращает значения нескольких локальных переменных в этом кадре.
Location location()
Возвращает Location текущей инструкции в кадре.
void setValue(LocalVariable variable, Value value)
Устанавливает Value LocalVariable в этом кадре.
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).
Определено в:
location в интерфейсе Locatable
Возвращает:
the Location текущей инструкции.
Исключения:
InvalidStackFrameException - если этот стек-кадр стал недопустимым. После возобновления потока кадра стек-кадр больше не является допустимым.

thread

ThreadReference thread()
Возвращает поток, в котором выполняется метод этого кадра.
Возвращает:
a ThreadReference, который отражает поток кадра.
Исключения:
InvalidStackFrameException - если этот стек-кадр стал недопустимым. После возобновления потока кадра стек-кадр больше не является допустимым.

thisObject

ObjectReference thisObject()
Возвращает значение 'this' для текущего кадра. ObjectReference для 'this' доступен только для методов экземпляра, не являющихся нативными.
Возвращает:
an ObjectReference, или null, если кадр представляет собой нативный или статический метод.
Исключения:
InvalidStackFrameException - если этот стек-кадр стал недопустимым. После возобновления потока кадра стек-кадр больше не является допустимым.

visibleVariables

List<LocalVariable> visibleVariables() throws AbsentInformationException
Возвращает список, содержащий каждую LocalVariable, доступную из расположения этого кадра.

Видимость основана на индексе кода текущей инструкции этого StackFrame. Каждая переменная имеет диапазон индексов байткода, в котором она доступна. Если метод этого 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 для доступа
Возвращает:
the 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 является только для чтения.
См. также:
  • VirtualMachine.canBeModified()

getArgumentValues

List<Value> getArgumentValues()
Возвращает значения всех аргументов в этом кадре. Значения возвращаются даже если нет информации о локальных переменных.
Возвращает:
список, содержащий объект Value для каждого аргумента этого кадра в порядке объявления аргументов. Если метод, соответствующий этому кадру, не имеет аргументов, возвращается пустой список.
Исключения:
InvalidStackFrameException - если этот стек-кадр стал недопустимым. После возобновления потока кадра стек-кадр больше не является допустимым.
С тех пор:
1.6

© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/jdk.jdi/com/sun/jdi/StackFrame.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API