.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)或另外两个参数之后添加另一个参数(解释为 InstructionPtrStackPtr)。

FrameIncrement
(仅基于 x86 的处理器)

指定超出基本指针的帧数。 例如,如果基指针0x0012FF00是帧 3 的地址,则命令 .frame 12ff00 等效于 .frame 3,. frame 12ff00 2 等效于 .frame 5

StackPtr
(仅基于 x86 的处理器)指定用于确定帧的堆栈跟踪的堆栈指针。 如果省略 StackPtr 和 InstructionPtr,调试器将使用 esp 寄存器指定的堆栈指针和 eip 寄存器指定的指令指针

InstructionPtr
(仅基于 x86 的处理器)指定用于确定帧的堆栈跟踪的指令指针。 如果省略 StackPtr 和 InstructionPtr,调试器将使用 esp 寄存器指定的堆栈指针和 eip 寄存器指定的指令指针

环境

说明
模式 用户模式、内核模式
目标 实时、崩溃转储
平台 全部

其他信息

有关本地上下文和其他上下文设置的详细信息,请参阅更改上下文。 有关如何显示局部变量和其他内存相关命令的详细信息,请参阅读取和写入内存

注解

当应用程序运行时,局部变量的含义取决于程序计数器的位置,因为此类变量的范围仅扩展到定义它们的函数。 如果不使用 .frame 命令,调试器将使用当前函数(堆栈上的当前帧)的范围作为 本地上下文

若要更改本地上下文,请使用 .frame 命令并指定所需的帧编号。

帧编号是堆栈跟踪中堆栈帧的位置。 可以使用 k(显示堆栈回溯)命令或“调用”窗口查看此堆栈跟踪。 第一行(当前帧)是帧号 0。 后续行表示帧编号 1、2、3 等。

如果将 n 参数与 k 命令一起使用,k 命令将帧编号与堆栈跟踪一起显示。 这些帧编号始终以十六进制形式显示。 另一方面, 除非使用前缀(如 0x)重写此设置,否则 .frame 命令会解释其默认弧度中的参数。 若要更改默认基数,请使用 n(设置基数)命令。

可以将本地上下文设置为不同的堆栈帧,以便查看新的本地变量信息。 但是,可用的实际变量取决于正在执行的代码。

如果发生任何应用程序执行,本地上下文将重置为程序计数器的范围。 如果寄存器上下文被更改,则本地上下文将重置为顶级堆栈帧。