WinDbg常用命令系列---单步执行p*

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时,每个指令都会在单步执行时显示出来。如果调试器在单步执行时遇到调用指令或中断,则被调用的子例程将完全执行,除非遇到断点。在调用或中断后的下一条指令中,控件将返回给调试器。每个步骤执行单个汇编指令或单个源行,这取决于调试器是处于汇编模式还是源模式。使用l+t和l-t命令或windbg工具栏上的按钮在这些模式之间切换。当您在windbg中多次快速单步执行时,调试信息窗口将在每个步骤之后更新。如果此更新导致响应时间变慢,请使用.suspend_ui (Suspend WinDbg Interface)暂时暂停刷新这些窗口。

pa (Step to Address)

pa命令执行程序,直到到达指定的地址,显示每个步骤。

用户模式:

[~Thread] pa [r] [= StartAddress] StopAddress ["Command"]

内核模式:

pa [r] [= StartAddress] StopAddress ["Command"]

参数:

  • Thread
    指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
  • r
    打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
  • StartAddress
    指定执行应开始的地址。如果不使用startaddress,则从指令指针指向的指令开始执行
  • StopAddress
    指定停止执行的地址。此地址必须与指令的确切地址匹配。
  • Command
    指定要在执行步骤后执行的调试器命令。此命令在显示标准p结果之前执行。如果还使用count,则在所有步骤完成后(但在显示最后一步的结果之前)执行指定的命令。

pa命令使目标开始执行。此执行将继续,直到到达指定的指令或遇到断点。如果在内核模式下使用此命令,则当在任何虚拟地址空间中的指定虚拟地址处遇到指令时,执行将停止。在此执行期间,所有步骤都将显式显示。被调用函数被视为单个单元。因此,此命令的显示与重复执行p(step)直到程序计数器到达指定地址时所看到的类似。

例如,下面的命令显式地遍历目标代码,直到到达当前函数的返回地址。

0:000> pa @$ra 

下面的示例演示如何使用pa命令和kb命令来显示堆栈跟踪:

0:000> pa 70b5d2f1 "kb"

pc (Step to Next Call)

pc命令执行程序,直到到达调用指令。

用户模式:

[~Thread] pc [r] [= StartAddress] [Count] 

内核模式:

pc [r] [= StartAddress] [Count] 

参数:

  • Thread
    指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
  • r
    打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
  • StartAddress
    指定调试器开始执行的地址。否则,调试器从指令指针指向的指令开始。
  • Count
    指定调试器要停止此命令必须遇到的调用指令数。默认值为1。

pc命令使目标开始执行。此执行将继续,直到达到调用指令或遇到断点。如果程序计数器已经在调用指令上,则执行整个调用。返回此调用后,将继续执行,直到到达另一个调用。这个调用的执行,而不是跟踪,是pc和tc(跟踪到下一个调用)之间的唯一区别。在源代码模式下,可以将一个源代码行与多个程序集指令相关联。pc命令不会在与当前源行关联的调用指令处停止。

ph (Step to Next Branching Instruction)

ph命令执行程序,直到到达任何类型的分支指令,包括条件或无条件分支、调用、返回和系统调用。

用户模式:

[~Thread] ph [r] [= StartAddress] [Count] 

内核模式:

ph [r] [= StartAddress] [Count] 

参数:

  • Thread
    指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
  • r
    打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
  • StartAddress
    指定调试器开始执行的地址。否则,调试器从指令指针指向的指令开始。
  • Count
    指定要停止此命令必须遇到的分支指令数。默认值为1。

ph命令使目标开始执行。此执行将继续执行,直到达到分支指令或遇到断点为止。如果程序计数器已经在分支指令上,则执行整个分支指令。返回此分支指令后,继续执行,直到到达另一个分支指令。调用的这种执行而不是跟踪是ph和th(跟踪到下一个分支指令)之间的唯一区别。在源模式下,可以将一个源行与多个汇编指令关联。ph命令不会在与当前源行关联的分支指令处停止。

pt (Step to Next Return)

Pt命令执行程序,直到达到返回指令。

用户模式:

[~Thread] pt [r] [= StartAddress] [Count] ["Command"]

内核模式:

pt [r] [= StartAddress] [Count] ["Command"]

参数:

  • Thread
    指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
  • r
    打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
  • StartAddress
    指定调试器开始执行的地址。否则,调试器从指令指针指向的指令开始。
  • Count
    指定要停止此命令必须遇到的返回指令数。默认值为1。
  • Command
    指定要在执行步骤后执行的调试器命令。此命令在显示标准pt结果之前执行。如果还使用count,则在所有步骤完成后(但在显示最后一步的结果之前)执行指定的命令。

pt命令将导致目标开始执行。 此执行将继续,直至返回达到指令或遇到断点。如果已经打开的程序计数器返回执行指令,整个返回。 返回此返回后,执行将继续,直到另一个返回为止。 此执行,而不是跟踪,在调用之间的唯一区别是pt tt (到下一步返回的 Trace)源模式中,可以将一个源行与多个程序集指令相关联。 pt命令不会停止处返回与当前的源行相关联的指令。

pct (Step to Next Call or Return)

pct命令执行程序,直到它到达调用指令或返回指令。

用户模式:

[~Thread] pct [r] [= StartAddress] [Count] 

内核模式:

pct [r] [= StartAddress] [Count]

参数:

  • Thread
    指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
  • r
    打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
  • StartAddress
    指定调试器开始执行的地址。否则,调试器从指令指针指向的指令开始。
  • Count
    指定要停止此命令必须遇到的调用或返回指令数。默认值为1。

pct命令使目标开始执行。此执行将继续,直到达到调用或返回指令或遇到断点为止。如果程序计数器已经在调用或返回指令上,则执行整个调用或返回。返回此调用或返回后,将继续执行,直到到达另一个调用或返回为止。这个调用的执行,而不是跟踪,是pct和tct(跟踪到下一个调用或返回)之间的唯一区别。在源代码模式下,可以将一个源代码行与多个程序集指令相关联。pct命令不会在与当前源代码行关联的调用或返回指令处停止。

猜你喜欢

转载自www.cnblogs.com/yilang/p/11459091.html