p (Step)
p
命令执行一条指令或者一行源码,并且选择性的显示所有寄存器和标志位的结果。当发生子函数调用或中断时,他们被当作单独的一步。
语法
用户模式
[~Thread] p [r] [= StartAddress] [Count] ["Command"]
内核模式
p [r] [= StartAddress] [Count] ["Command"]
参数
- Thread
- 指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。
- r
- 打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过pr、 tr或.prompt_allow -reg命令来禁止显示。这三个命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。
也可以通过l-os命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask)
命令。
- StartAddress
- 指定执行开始的地址。如果没有使用StartAddress,则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法。
- Count
- 指定在停止前要单步执行的指令数量或源码行数。每一步在调试器命令窗口中都会显示为一个单独的动作。默认值为1。
- Command
- 指定在单步完成后要执行的调试器命令。该命令在标准的p结果显示出来之前就会执行。如果还使用了Count,这个命令会在所有步骤都执行完成后才会执行(但是在最后一步的结果显示出来之前)。
环境
模式 |
用户模式、内核模式 |
目标 |
仅活动调试 |
平台 |
所有 |
注释
指定了Count 时,每条指令都会像单步执行它一样被显示出来。
如果调试器在单步的时候遇到call指令或中断,被调用的子函数如果没有遇到断点,会直接执行完成。到达调用或中断的下一条指令时,控制会返回给调试器。
根据调试器运行在汇编模式还是源码模式,每一步都执行单独的一条汇编指令或源代码行。使用l+t和l-t命令或者WinDbg工具栏上的按钮来在这些模式之间切换。
在WinDbg中快速的单步执行很多次时,调试信息窗口会在每一步之后都进行刷新。如果这种刷新造成响应时间变长,可以使用.suspend_ui (Suspend WinDbg Interface)来临时暂停这些窗口的刷新。
附加信息
关于执行p命令的更多信息和其他相关命令的概述,查看控制调试目标。
Build machine: CAPEBUILD