Spec-Zone.ru › OpenJDK 25

Интерфейс StackFrame

Все суперинтерфейсы:
Locatable, Mirror
public interface StackFrame extends Mirror, Locatable
Состояние одного вызова метода в стеке вызовов потока. По мере выполнения потока кадры стека помещаются в стек вызовов и извлекаются из него при вызове методов и их возврате. StackFrame отражает один такой кадр целевой виртуальной машины в определённый момент выполнения потока. Таким образом, стек вызовов представляет собой просто список объектов StackFrame. Получить стек вызовов можно в любой момент, когда поток приостановлен, вызвав ThreadReference.frames()

StackFrame предоставляет доступ к локальным переменным метода и их текущим значениям.

Срок жизни 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, доступных из расположения этого кадра.

Методы, объявленные в интерфейсе 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. Для каждой переменной задан диапазон индексов байт-кода, в котором она доступна. Переменная видима, если метод этого кадра стека совпадает с методом переменной, а индекс кода 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().

Для виртуальных потоков целевая виртуальная машина поддерживает задание значений локальных переменных, если этот кадр является верхним кадром, а поток приостановлен на событии. Целевая виртуальная машина может поддерживать задание значений локальных переменных и в других случаях.

Значения объектов должны быть совместимы с типом переменной при присваивании (это означает, что тип переменной должен быть загружен загрузчиком классов содержащего её класса). Примитивные значения должны быть либо совместимы с типом переменной при присваивании, либо преобразуемы в этот тип без потери информации. Дополнительные сведения о совместимости при присваивании см. в разделе 5.2 спецификации JLS.

Параметры:
variable — поле, содержащее требуемое значение
value — новое присваиваемое значение
Выбрасывает:
IllegalArgumentException — если поле недопустимо для класса этого объекта.
InvalidTypeException — если тип значения не соответствует типу переменной.
ClassNotLoadedException — если тип переменной ещё не загружен соответствующим загрузчиком классов.
InvalidStackFrameException — если этот кадр стека стал недействительным. После возобновления потока кадр стека становится недействительным.
OpaqueFrameException — если этот кадр находится в стеке вызовов приостановленного виртуального потока, а целевая виртуальная машина не поддерживает задание значения локальных переменных в этом кадре.
VMCannotBeModifiedException — если VirtualMachine доступна только для чтения.
См. также:
  • VirtualMachine.canBeModified()

getArgumentValues

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/jdk.jdi/com/sun/jdi/StackFrame.html

Spec-Zone.ru

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