WinDbg常用命令系列---线程栈中局部上下文切换.frame
.frame (Set Local Context)
.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(display stack backtrace)命令或“调用”窗口查看此堆栈跟踪。第一行(当前帧)是帧号0。随后的行表示帧号1、2、3等。 如果将n参数与k命令一起使用,k命令将显示帧号和堆栈跟踪。这些帧编号始终以十六进制形式显示。另一方面,.frame命令将其参数解释为默认基数,除非使用前缀(如x)重写此设置。若要更改默认基数,请使用n(set number base)命令。您可以将本地上下文设置为不同的堆栈帧,以便查看新的本地变量信息。但是,可用的实际变量取决于正在执行的代码。如果发生任何应用程序执行,本地上下文将重置为程序计数器的作用域。如果寄存器上下文发生更改,则本地上下文将重置为顶部堆栈帧。
例如:
0:000> kv
# ChildEBP RetAddr Args to Child
00 009efb40 7772448d ffffffff 00000000 00f9114a ntdll!NtTerminateProcess+0xc (FPO: [2,0,0])
01 009efc18 76e03a22 00000000 77e8f3b0 ffffffff ntdll!RtlExitUserProcess+0xbd (FPO: [Non-Fpo])
02 009efc2c 0f07e619 00000000 009efc88 0f07ee79 KERNEL32!ExitProcessImplementation+0x12 (FPO: [1,0,0])
03 009efc38 0f07ee79 00000000 1554bc36 00f9114a MSVCR120D!__crtExitProcess+0x19 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\startup\crt0dat.c @ 776]
04 009efc88 0f07eea0 00000000 00000000 00000000 MSVCR120D!doexit+0x1a9 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\startup\crt0dat.c @ 678]
05 009efc9c 00f928b6 00000000 c88ea480 00f9114a MSVCR120D!exit+0x10 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\startup\crt0dat.c @ 417]
06 009efce4 00f92a8d 009efd00 76e08484 00bf7000 ConsoleApplication3!__tmainCRTStartup+0x1b6 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 662]
07 009efcec 76e08484 00bf7000 76e08460 84bfe2f0 ConsoleApplication3!mainCRTStartup+0xd (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 466]
08 009efd00 777541c8 00bf7000 975113fe 00000000 KERNEL32!BaseThreadInitThunk+0x24 (FPO: [Non-Fpo])
09 009efd48 77754198 ffffffff 7776f32e 00000000 ntdll!__RtlUserThreadStart+0x2f (FPO: [SEH])
0a 009efd58 00000000 00f9114a 00bf7000 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])
0:000> .frame 6
06 009efce4 00f92a8d ConsoleApplication3!__tmainCRTStartup+0x1b6 [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 662]
0:000> dv
lock_free = 0x00000000
fiberid = 0x009f0000
nested = 0n0
WinDbg常用命令系列---线程栈中局部上下文切换.frame的更多相关文章
- WinDbg常用命令系列---线程相关操作~*
~ (Thread Status) 波浪符(~)命令显示指定线程或当前进程中所有线程的状态. ~ Thread 参数: Thread指定要显示的线程.如果省略此参数,将显示所有线程. 环境: 模式 仅 ...
- WinDbg常用命令系列---断点操作b*
ba (Break on Access) ba命令设置处理器断点(通常称为数据断点,不太准确).此断点在访问指定内存时触发. 用户模式下 [~Thread] ba[ID] Access Size [O ...
- WinDbg常用命令系列---!findstack
简介 !findstack扩展查找所有包含指定的符号或模块的堆栈.此命令搜索线程调用堆栈中的特定符号,并显示匹配的线程. 使用形式 !findstack Symbol[DisplayLevel] !f ...
- WinDbg常用命令系列---显示局部变量dv
dv (Display Local Variables) dv命令显示当前作用域中所有局部变量的名称和值. dv [Flags] [Pattern] 参数: Flags显示其他信息.可以包括以下任何区 ...
- WinDbg常用命令系列---检查符号X
x (Examine Symbols) x命令在所有与指定模式匹配的上下文中显示符号. x [Options] Module!Symbol x [Options] * 参数: Options特定符号搜 ...
- WinDbg常用命令系列---内存数据显示和对应符号显示d*s(dds、dps、dqs)
命令dds, dps, dqs显示给定范围内的内存内容.假定该内存是符号表中的一系列地址.相应的符号也会显示出来. dds [Options] [Range] dqs [Options] [Rang ...
- WinDbg常用命令系列---查看线程调用栈命令K*简介
Windbg里的K*命令显示给定线程的堆栈帧以及相关信息,对于我们调试时,进行调用栈回溯有很大的帮助. 一.K*命令使用方式 在不同平台上,K*命令的使用组合如下 User-Mode, x86 Pro ...
- WinDbg常用命令系列---!uniqstack
简介 这个!uniqstack扩展扩展显示的所有线程的堆栈的所有当前进程,不包括显示为具有重复项的堆栈中. 使用形式 !uniqstack [ -b | -v | -p ] [ -n ] 参数 -b将 ...
- WinDbg常用命令系列---单步执行p*
p (Step) p命令执行单个指令或源代码行,并可选地显示所有寄存器和标志的结果值.当子例程调用或中断发生时,它们被视为单个步骤. 用户模式: [~Thread] p[r] [= StartAddr ...
随机推荐
- JAVA简易数据连接池Condition
用Condition和synchronized: import java.sql.Connection; import java.sql.DriverManager; import java.sql. ...
- C#录制声卡声音喇叭声音音箱声音
在项目中,我们会需要录制电脑播放的声音,比如歌曲,电影声音,聊天声音等通过声卡音箱发出的声音.那么如何采集呢?当然是采用SharpCapture!下面开始演示关键代码,您也可以在文末下载全部源码: 设 ...
- 2019 鹏博士java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.鹏博士等公司offer,岗位是Java后端开发,因为发展原因最终选择去了鹏博士,入职一年时间了,之前面试了很多 ...
- 2019-07-24 PHP中mysql_fetch_assoc 和 mysql_fetch_array 有什么区别?
mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组 来看下面的例子: 数据库中有上述几条数据,一般我们想取用就要按照如下代码: $con = mysql_connect('12 ...
- Matlab代码优化之道
一. 遵守Performance Acceleration的规则 关于什么是“Performance Acceleration”请参阅matlab的帮助文件.1.只有使用以下数据类型,matlab才会 ...
- TCP连接与断开
两台宿主机 一台:作为服务器 另一台:作为客户端 服务器的步骤: 打开[控制面板]----点击[程序]---点击程序和功能中[打开或关闭Windows功能]---点击[Telnet服务器]--点击[确 ...
- 【转载】C#中使用double.TryParse方法将字符串转换为double类型
在C#编程过程中,将字符串string转换为double类型过程中,时常使用double.Parse方法,但double.Parse在无法转换的时候,会抛出程序异常,其实还有个double.TryPa ...
- 正则表达式修饰符 i、g、m、s、U、x、a、D、e 等。
正则表达式中常用的模式修正符有i.g.m.s.U.x.a.D.e 等. 它们之间可以组合搭配使用. i 不区分(ignore)大小写: 例如: /abc/i 可以匹配 abc.aBC.Abc g 全局 ...
- printk打印级别
默认级别 # cat /proc/sys/kernel/printk 4 4 1 7 分别是:控制台日志级别.默认的消息日志级别.最低的控制台日志级别和默认的控制台日志级别 举例 # echo 0 & ...
- 【HICP Gauss】数据库 数据库管理(文件 用户管理 系统权限 对象权限 profile)-7
数据库运行 依赖不同类型的文件 ,数据文件 参数文件 控制文件 redo日志文件 运行日志文件 审计日志文件等 数据文件 就是表空间文件 存储数据库的数据文件 参数文件 用户修改的配置信息 控制文件 ...