Debugging Tools for Windows

.frame (Set Local Context)

.frame 命令指定使用哪个局部上下文(作用域)来解析局部变量,或者显示当前的局部上下文。

语法

.frame [/r] [FrameNumber
.frame [/r= BasePtr [FrameIncrement
.frame [/r= BasePtr StackPtr InstructionPtr 

参数

/r
显示指定的局部上下文的寄存器和其他信息。
FrameNumber
指定想使用的局部上下文的帧序号。如果该参数为0,则命令指定当前帧。如果省略该参数,则显示当前的局部上下文。
BasePtr
如果在命令名(.frame)后添加了一个等号(=),指定要用来确认堆栈帧的堆栈回溯基指针。在基于x86的处理器上,在BasePtr后可以添加一个(作为 FrameIncrement)或两个(作为InstructionPtrStackPtr)附加的参数。
FrameIncrement
(仅x86处理器) 指定要越过基指针之后的帧的数目。例如,如果基指针0x0012FF00是第三帧的地址,命令.frame 12ff00 相当于 .frame 3,而.frame 12ff00 2 相当于 .frame 5
StackPtr
(仅x86处理器) 指定用来确认帧的堆栈回溯的堆栈指针。如果省略StackPtrInstructionPtr,调试器会使用esp寄存器中的堆栈指针和eip中的指令指针。
InstructionPtr
(仅x86处理器) 指定用来确认帧的堆栈回溯的指令指针。如果省略StackPtrInstructionPtr,调试器会使用esp寄存器中的堆栈指针和eip中的指令指针。

环境

模式 用户模式、内核模式
目标 活动目标、崩溃转储
平台 所有

注释

程序运行时,局部变量的意义由程序计数器的位置决定,因为这些局部变量的作用域仅在定义它们的函数内部。如果没有使用.frame 命令,调试器使用当前函数(调用堆栈中的当前帧)的作用域作为局部上下文

使用.frame 命令并指定需要的帧序号来改变局部上下文。

帧序号(frame number)是堆栈帧在堆栈回溯中的位置。可以使用k (Display Stack Backtrace)命令或者Calls 窗口查看堆栈回溯。第一行 (当前帧) 的帧序号是0。后面的行分别是1、2、3等等。

如果k命令使用n参数,则k命令堆栈回溯和帧序号。帧序号总是以16进制形式显示。另一方面,如果没有指定像0x这样的前缀,则.frame 用当前基数来识别它的参数。使用n (Set Number Base)命令来改变当前基数。

可以将局部上下文设置到另一个堆栈帧来查看另外的局部变量信息。但是,实际可用的变量由被执行的代码决定。

如果又对程序进行执行,调试器会将局部上下文重置为程序计数器的作用域。如果寄存器上下文改变,局部上下文也重置到调用堆栈顶部的帧。

附加信息

关于局部上下文和其他上下文的设置的更多信息,查看改变上下文。关于如何显示局部变量的更多信息和其他内存相关的命令,查看读写内存

Build machine: CAPEBUILD