.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)或另外两个参数之后添加另一个参数(解释为 InstructionPtr 和 StackPtr)。
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(设置基数)命令。
可以将本地上下文设置为不同的堆栈帧,以便查看新的本地变量信息。 但是,可用的实际变量取决于正在执行的代码。
如果发生任何应用程序执行,本地上下文将重置为程序计数器的范围。 如果寄存器上下文被更改,则本地上下文将重置为顶级堆栈帧。