Windbg常用命令系列---.f+, .f- (切换Local Context)
.f+, .f- (Shift Local Context)
.f+ 命令将帧序号移动到当前堆栈中的下一帧。.f- 命令将帧序号移动到当前堆栈中的上一帧。
语法
.f+
.f-
环境
模式 | 用户模式、内核模式 |
目标 | 活动目标、崩溃转储 |
平台 | 所有 |
注释
帧 (frame)用来指定调试器用来解析局部变量的局部上下文(作用域)。
.f+和.f-
命令是用来在当前调用堆栈中移动到下一帧或者前一帧的快捷方式。这些命令和下面的.frame
命令作用相同,但是.f 要更短更方便:
- .f+ 和 .frame @$frame + 1一样。
- .f- 和 .frame @$frame - 1一样。
美元符号($)表示帧的值是一个伪寄存器。At符号(@)使得调试器访问该值更快,因为它告诉调试器后面的字符串是一个寄存器或者伪寄存器。
程序运行时,局部变量的意义由程序计数器的位置决定,因为这些变量的作用域仅在定义它们的函数内部。如果没有使用.f+ 或.f-
命令(或者 .frame 命令),调试器会使用当前函数(调用堆栈中的当前帧)的作用域作为局部上下文。
帧序号(frame number)是堆栈帧在堆栈回溯中的位置。可以使用k, kb, kd, kp, kP, kv (Display Stack Backtrace)命令或者Calls
窗口查看堆栈回溯。第一行 (当前帧) 的帧序号是0。后面的行分别是1、2、3等等。
可以将局部上下文设置到另一个堆栈帧来查看新的局部变量信息。但是,实际可用的变量由执行的代码决定。
如果又对程序进行执行,调试器会将局部上下文重置为程序计数器的作用域。如果寄存器上下文改变,局部上下文也重置到调用堆栈顶部的帧。