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)命令。
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)暫時暫停刷新這些窗口。
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"]
參數:
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命令來顯示堆棧跟蹤:
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)
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命令不會在與當前源行關聯的分支指令處停止。
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"]
內核模式:
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,則在所有步驟完成后(但在顯示最后一步的結果之前)執行指定的命令。
pt命令將導致目標開始執行。 此執行將繼續,直至返回達到指令或遇到斷點。如果已經打開的程序計數器返回執行指令,整個返回。 返回此返回后,執行將繼續,直到另一個返回為止。 此執行,而不是跟蹤,在調用之間的唯一區別是pt并 tt (到下一步返回的 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*的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: monk js_对象检测-使用Monk
- 下一篇: linux服务器系统盘坏且系统盘为软ra