.frame (установка локального контекста)

Команда .frame указывает, какой локальный контекст (область) используется для интерпретации локальных переменных или отображает текущий локальный контекст.

.frame [/c] [/r] [FrameNumber] 
.frame [/c] [/r] = BasePtr [FrameIncrement] 
.frame [/c] [/r] = BasePtr StackPtr InstructionPtr 

Параметры

/C
Задает указанный кадр в качестве текущего локального контекста переопределения. Это действие позволяет пользователю получить доступ к энергонезависимому регистру для любой функции в стеке вызовов.

/R
Отображает регистры и другие сведения об указанном локальном контексте.

FrameNumber
Указывает номер кадра, локальный контекст которого требуется. Если этот параметр равен нулю, команда задает текущий кадр. Если этот параметр не указан, эта команда отображает текущий локальный контекст.

BasePtr
Указывает базовый указатель для трассировки стека, которая используется для определения кадра, если после имени команды (.frame) добавляется знак равенства (=). На процессоре на базе x86 вы добавляете еще один аргумент после BasePtr (который интерпретируется как FrameIncrement) или еще два аргумента после BasePtr (которые интерпретируются как InstructionPtr и StackPtr).

FrameIncrement
(только для процессоров x86)

Указывает дополнительное количество кадров после базового указателя. Например, если базовый указатель 0x0012FF00 является адресом кадра 3, команда .frame 12ff00 эквивалентна .frame 3, а .frame 12ff00 2.frame 5.

StackPtr
(только для процессоров x86) Указывает указатель стека для трассировки стека, которая используется для определения кадра. Если опустить StackPtr и InstructionPtr, отладчик использует указатель стека, который указывает регистр esp , и указатель инструкции, который указывает регистр eip .

ИнструкцияPtr
(только для процессоров x86) Указывает указатель инструкции для трассировки стека, которая используется для определения кадра. Если опустить StackPtr и InstructionPtr, отладчик использует указатель стека, который указывает регистр esp , и указатель инструкции, который указывает регистр eip .

Среда

Элемент Описание
Режимы Пользовательский режим, режим ядра
Цели Динамический аварийный дамп
Платформы Все

Дополнительные сведения

Дополнительные сведения о локальном контексте и других параметрах контекста см. в разделе Изменение контекстов. Дополнительные сведения о том, как отображать локальные переменные и другие команды, связанные с памятью, см. в разделе Чтение и запись памяти.

Комментарии

При выполнении приложения значение локальных переменных зависит от расположения счетчика программы, так как область таких переменных распространяется только на функцию, в которую они определены. Если команда .frame не используется, отладчик использует область текущей функции (текущий кадр в стеке) в качестве локального контекста.

Чтобы изменить локальный контекст, используйте команду .frame и укажите нужный номер кадра.

Номер кадра — это положение кадра стека в трассировке стека. Эту трассировку стека можно просмотреть с помощью команды k (Display Stack Backtrace) или окна Вызовы. Первая строка (текущий кадр) — это номер кадра 0. Последующие строки представляют собой номера кадров 1, 2, 3 и т. д.

При использовании параметра n с командой k команда k отображает номера кадров вместе с трассировкой стека. Эти номера кадров всегда отображаются в шестнадцатеричной форме. С другой стороны, команда .frame интерпретирует свой аргумент в радиксе по умолчанию, если этот параметр не переопределен префиксом, например 0x. Чтобы изменить радикс по умолчанию, используйте команду n (задать числовую базу).

Вы можете задать для локального контекста другой кадр стека, чтобы вы могли просматривать новые сведения о локальных переменных. Однако фактические доступные переменные зависят от выполняемого кода.

Локальный контекст сбрасывается до область счетчика программы, если выполняется какое-либо приложение. При изменении контекста регистра локальный контекст сбрасывается в верхний кадр стека.