.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 寄存器指定的指令指针。
InstructionPtr
(基于 x86 的处理器仅) 指定用于确定帧的堆栈跟踪的指令指针。 如果省略 StackPtr 和 InstructionPtr,调试器将使用 esp 寄存器指定的堆栈指针和 eip 寄存器指定的指令指针。
环境
项 | 说明 |
---|---|
模式 | 用户模式、内核模式 |
目标 | 实时、故障转储 |
平台 | 全部 |
其他信息
有关本地上下文和其他上下文设置的详细信息,请参阅 更改上下文。 有关如何显示局部变量和其他与内存相关的命令的详细信息,请参阅 读取和写入内存。
注解
当应用程序运行时,局部变量的含义取决于程序计数器的位置,因为此类变量的范围仅扩展到定义它们的函数。 如果不使用 .frame 命令,调试器将使用当前函数的范围 (堆栈上的当前帧) 作为 本地上下文。
若要更改本地上下文,请使用 .frame 命令并指定所需的帧编号。
帧编号是堆栈帧在堆栈跟踪中的位置。 可以使用 k (显示堆栈回溯) 命令或 “调用”窗口查看此堆栈跟踪。 当前帧) (的第一行是帧编号 0。 后续行表示帧编号 1、2、3 等。
如果将 n 参数与 k 命令一起使用, 则 k 命令将帧编号与堆栈跟踪一起显示。 这些帧编号始终以十六进制形式显示。 另一方面, .frame 命令在默认基数中解释其参数,除非你用前缀(如 0x)替代此设置。 若要更改默认基数,请使用 n (Set Number Base) 命令。
可以将本地上下文设置为不同的堆栈帧,以便查看新的局部变量信息。 但是,可用的实际变量取决于正在执行的代码。
如果发生任何应用程序执行,本地上下文将重置为程序计数器的范围。 如果更改了寄存器上下文,本地上下文将重置为顶部堆栈帧。
反馈
https://aka.ms/ContentUserFeedback。
即将推出:在整个 2024 年,我们将逐步取消以“GitHub 问题”作为内容的反馈机制,并将其替换为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈