Поделиться через


.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 (которые интерпретируются как ИнструкцияPtr и 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.

Среда

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

Дополнительная информация

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

Замечания

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

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

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

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

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

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