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)命令。

    kāiguāncúnbiāozhìdexiǎnshì示 。 rènqíngkuàngxià下 , jiāngxiǎnshìcúnbiāozhì志 。 shǐ使 yòng用 p r 、 t r huò或 . p r o m p t _ a l l o w - r e g mìnglìngjìnyòngcúnxiǎnshì示 。 suǒyǒuzhèsānmìnglìngdōukòngzhìzhexiāngtóngdeshèzhì置 , nínshǐ使 yòngmenzhōngderènláigàiqiánduìzhèxiēmìnglìngderènshǐ使 yòng用 。

    You can also disable register display by using the l-os command. This setting is separate from the other three commands. To control which registers and flags are displayed, use the rm (Register Mask) command.

  • StartAddress
    指定执行应开始的地址。如果不使用startaddress,则从指令指针指向的指令开始执行
  • Count
    指定停止前要单步执行的指令或源行数。每个步骤在调试器命令窗口中显示为单独的操作。默认值为1。
  • Command
    指定要在执行步骤后执行的调试器命令。此命令在显示标准p结果之前执行。如果还使用count,则在所有步骤完成后(但在显示最后一步的结果之前)执行指定的命令。

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

dāngnínzhǐdìng定 c o u n t shí时 , měizhǐlìngdōuhuìzàidānzhíxíngshíxiǎnshìchūlái来 。

pa (Step to Address)

If the debugger encounters a call instruction or interrupt while stepping, the called subroutine will execute completely unless a breakpoint is encountered. Control is returned to the debugger at the next instruction after the call or interrupt.

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

用户模式:

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

内核模式:

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

参数:

guǒtiáoshìzàidānzhíxíngshídàodiàoyòngzhǐlìnghuòzhōngduàn断 , bèidiàoyòngdechéngjiāngwánquánzhíxíng行 , chúfēidàoduàndiǎn点 。 zàidiàoyònghuòzhōngduànhòudexiàtiáozhǐlìngzhōng中 , kòngjiànjiāngfǎnhuígěitiáoshì器 。

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

Each step executes a single assembly instruction or a single source line, depending on whether the debugger is in assembly mode or source mode. Use the l+t and l-t commands or the buttons on the WinDbg toolbar to switch between these modes.

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

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

0:000> pa @$ra

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

měizhòuzhíxíngdānhuìbiānzhǐlìnghuòdānyuánxíng行 , zhèjuétiáoshìshìchǔhuìbiānshìháishìyuánshì式 。 shǐ使 yòng用 l + t 和 l - t mìnglìnghuò或 w i n d b g gōnglánshàngdeànniǔzàizhèxiēshìzhījiānqiēhuàn换 。

0:000> pa 70b5d2f1 "kb"

pc (Step to Next Call)

When you are quickly stepping many times in WinDbg, the debugging information windows are updated after each step. If this update causes slower response time, use .suspend_ui (Suspend WinDbg Interface) to temporarily suspend the refreshing of these windows.

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)

p c mìnglìngshǐ使 biāokāishǐzhíxíng行 。 zhíxíngjiāng续 , zhídàodàodiàoyòngzhǐlìnghuòdàoduàndiǎn点 。

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。

If the program counter is already on a call instruction, the entire call is executed. After this call is returned, execution continues until another call is reached. This execution, rather than tracing, of the call is the only difference between pc and tc (Trace to Next Call).

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

p h mìnglìngshǐ使 biāokāishǐzhíxíng行 。 zhíxíngjiāngzhíxíng行 , zhídàodàofēnzhīzhǐlìnghuòdàoduàndiǎnwéizhǐ止 。

pt (Step to Next Return)

If the program counter is already on a branching instruction, the entire branching instruction is executed. After this branching instruction is returned, execution continues until another branching instruction is reached. This execution, rather than tracing, of the call is the only difference between ph and th (Trace to Next Branching Instruction).

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

用户模式:

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

内核模式:

guǒchéngshùjīngzàifēnzhīzhǐlìngshàng上 , zhíxíngzhěngfēnzhīzhǐlìng令 。 fǎnhuífēnzhīzhǐlìnghòu后 , zhíxíng行 , zhídàodàolìngfēnzhīzhǐlìng令 。 diàoyòngdezhèzhǒngzhíxíngérshìgēnzōngshì是 p h 和 t h ( gēnzōngdàoxiàfēnzhīzhǐlìng令 ) zhījiāndewéibié别 。

In source mode, you can associate one source line with multiple assembly instructions. The ph command does not stop at a branching instruction that is associated with the current source line.

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

参数:

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

guǒchéngshùjīngzàidiàoyòngzhǐlìngshàng上 , zhíxíngzhěngdiàoyòng用 。 fǎnhuídiàoyònghòu后 , jiāngzhíxíng行 , zhídàodàolìngdiàoyòng用 。 zhègediàoyòngdezhíxíng行 , érshìgēnzōng踪 , shì是 P C 和 T C ( gēnzōngdàoxiàdiàoyòng用 ) zhījiāndewéibié别 。

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

In source mode, you can associate one source line with multiple assembly instructions. The pc command does not stop at a call instruction that is associated with the current source line.

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命令不会在与当前源代码行关联的调用或返回指令处停止。

WinDbg常用命令系列---单步执行p*的更多相关文章

  1. WinDbg常用命令系列---源代码操作相关命令

    lsf, lsf- (Load or Unload Source File) lsf和lsf-命令加载或卸载源文件. lsf Filename lsf- Filename 参数: Filename指定 ...

  2. WinDbg常用命令系列---断点操作b*

    ba (Break on Access) ba命令设置处理器断点(通常称为数据断点,不太准确).此断点在访问指定内存时触发. 用户模式下 [~Thread] ba[ID] Access Size [O ...

  3. WinDbg常用命令系列---!heap

    !heap 简介 !heap扩展显示堆使用信息.控制堆管理器中的断点.检测泄漏的堆块.搜索堆块或显示页堆信息.此扩展支持段堆和NT堆.使用!heap没有参数列出所有堆及其类型的堆. 使用形式 !hea ...

  4. WinDbg常用命令系列---显示段选择器dg、链接列表dl和字符串ds/dS

    dg (Display Selector) dg命令显示指定选择器的段描述符. dg FirstSelector [LastSelector] 参数: FirstSelector指定要显示的第一个选择 ...

  5. WinDbg常用命令系列---.cmdtree

    .cmdtree 简介 使用形式 .cmdtree cmdfile 参数 cmdfile命令文件,包含多个你需要的命令.必须是一个文本档 使用步骤 1.使用命令创建文本文件test.wl,使用以下示例 ...

  6. WinDbg常用命令系列---查看线程调用栈命令K*简介

    Windbg里的K*命令显示给定线程的堆栈帧以及相关信息,对于我们调试时,进行调用栈回溯有很大的帮助. 一.K*命令使用方式 在不同平台上,K*命令的使用组合如下 User-Mode, x86 Pro ...

  7. WinDbg常用命令系列---sx, sxd, sxe, sxi, sxn, sxr, sx- (设置异常)

    简介 sx*命令控制调试器在正在调试的应用程序中发生异常或发生某些事件时采取的操作. 使用形式 sx sx{e|d|i|n} [-c "Cmd1"] [-c2 "Cmd2 ...

  8. WinDbg常用命令系列---!uniqstack

    简介 这个!uniqstack扩展扩展显示的所有线程的堆栈的所有当前进程,不包括显示为具有重复项的堆栈中. 使用形式 !uniqstack [ -b | -v | -p ] [ -n ] 参数 -b将 ...

  9. WinDbg常用命令系列---.write_cmd_hist (写命令历史记录)

    .write_cmd_hist 简介 .write_cmd_hist命令将调试器命令窗口的整个历史记录写入文件. 使用形式 .write_cmd_hist Filename 参数 Filename指定 ...

随机推荐

  1. PV、UV、UIP、VV、DAU、CTR指的是什么?

    PV(page view) 网站浏览量,指网页的浏览次数,用户每打开一次页面就记录一次PV,多次打开则累加. UV(unique vistor) 独立访客数,指的是某一天访问某站点的人数,以cooki ...

  2. KepServerEX读写三菱PLC,车间现场测试记录,带你了解【数据采集的困境】的前世与今生

    1.不了解KepServerEX 的鞋童,可以先了解一下OPC UA,OPC UA服务端.我们当前项目读写三菱PLC是自己写的类库,但我感觉调用不够方便灵活,工作之余用OPC UA方式尝试一下 2.数 ...

  3. BZOJ1060或洛谷1131 [ZJOI2007]时态同步

    BZOJ原题链接 洛谷原题链接 看上去就觉得是一道树形\(\mathtt{DP}\),不过到头来我发现我写了一个贪心.. 显然对越靠近根(记为\(r\))的边进行加权贡献越大,且同步的时间显然是从根到 ...

  4. idea中的调试按键(f5,f6,f7,f8,f9)

    f5: 如果断点处存在方法,f5 则强制进入方法内部,然后一步一步执行方法体, 如果再遇到方法,则继续进入方法体,如此循环,直到执行到断点开始处: f6: 从断点处一步步执行以后的代码,会跳出断点所在 ...

  5. 2017-07-25 PDO预处理以及防止sql注入

    首先来看下不做任何处理的php登录,首先是HTML页面代码 <html> <head><title>用户登录</title></head> ...

  6. Git下载安装及设置详细教程

    Git下载安装及设置详细教程 一.安装前准备   1. 廖雪峰老师Git教程 :推荐Git入门教程.  2. 按照自己的系统版本下载Git软件,我的操作系统:Windows7 64位,安装版本为Git ...

  7. 手写MQ框架(二)-服务端实现

    一.起航 书接上文->手写MQ框架(一)-准备启程 本着从无到有,从有到优的原则,所以计划先通过web实现功能,然后再优化改写为socket的形式. 1.关于技术选型 web框架使用了之前写的g ...

  8. Node和浏览器端所支持的模块规范不同

  9. JavaWeb 之 JSTL 标签

    JSTL 标签库 一.概述 1.概念 JSTL : JavaServer Pages Tag Library  JSP标准标签库. 是由 Apache 组织提供的开源的免费的 jsp 标签. 2.作用 ...

  10. ora121 tips

    1. 900929 - Linux: STORAGE_PARAMETERS_WRONG_SET and "mmap() failed" Solution Increase the ...