Интерфейс 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
Возвращает:
локацию 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

Spec-Zone .ru
спецификации, руководства, описания, API