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

FrameIncrement
(基于 x86 的处理器仅)

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

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

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

环境

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

其他信息

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

注解

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

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

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

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

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

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