WinDbg常用命令系列---单步执行p*
p (Step)
p命令執(zhí)行單個(gè)指令或源代碼行,并可選地顯示所有寄存器和標(biāo)志的結(jié)果值。當(dāng)子例程調(diào)用或中斷發(fā)生時(shí),它們被視為單個(gè)步驟。
用戶模式:
[~Thread] p[r] [= StartAddress] [Count] ["Command"]
內(nèi)核模式:
p[r] [= StartAddress] [Count] ["Command"]
參數(shù):
Thread
指定要繼續(xù)執(zhí)行的線程。所有其他線程都被凍結(jié)。只能在用戶模式下指定線程。
r
打開(kāi)和關(guān)閉寄存器和標(biāo)志的顯示。默認(rèn)情況下,將顯示寄存器和標(biāo)志??梢允褂胮r、tr或.prompt_allow-reg命令禁用寄存器顯示。所有這三個(gè)命令都控制著相同的設(shè)置,您可以使用它們中的任何一個(gè)來(lái)覆蓋以前對(duì)這些命令的任何使用。也可以使用l-os命令禁用寄存器顯示。此設(shè)置與其他三個(gè)命令不同。要控制顯示哪些寄存器和標(biāo)志,請(qǐng)使用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
指定執(zhí)行應(yīng)開(kāi)始的地址。如果不使用startaddress,則從指令指針指向的指令開(kāi)始執(zhí)行
Count
指定停止前要單步執(zhí)行的指令或源行數(shù)。每個(gè)步驟在調(diào)試器命令窗口中顯示為單獨(dú)的操作。默認(rèn)值為1。
Command
指定要在執(zhí)行步驟后執(zhí)行的調(diào)試器命令。此命令在顯示標(biāo)準(zhǔn)p結(jié)果之前執(zhí)行。如果還使用count,則在所有步驟完成后(但在顯示最后一步的結(jié)果之前)執(zhí)行指定的命令。
當(dāng)您指定count時(shí),每個(gè)指令都會(huì)在單步執(zhí)行時(shí)顯示出來(lái)。如果調(diào)試器在單步執(zhí)行時(shí)遇到調(diào)用指令或中斷,則被調(diào)用的子例程將完全執(zhí)行,除非遇到斷點(diǎn)。在調(diào)用或中斷后的下一條指令中,控件將返回給調(diào)試器。每個(gè)步驟執(zhí)行單個(gè)匯編指令或單個(gè)源行,這取決于調(diào)試器是處于匯編模式還是源模式。使用l+t和l-t命令或windbg工具欄上的按鈕在這些模式之間切換。當(dāng)您在windbg中多次快速單步執(zhí)行時(shí),調(diào)試信息窗口將在每個(gè)步驟之后更新。如果此更新導(dǎo)致響應(yīng)時(shí)間變慢,請(qǐng)使用.suspend_ui (Suspend WinDbg Interface)暫時(shí)暫停刷新這些窗口。
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命令執(zhí)行程序,直到到達(dá)指定的地址,顯示每個(gè)步驟。
用戶模式:
[~Thread] pa [r] [= StartAddress] StopAddress ["Command"]
內(nèi)核模式:
pa [r] [= StartAddress] StopAddress ["Command"]
參數(shù):
Thread
指定要繼續(xù)執(zhí)行的線程。所有其他線程都被凍結(jié)。只能在用戶模式下指定線程。
r
打開(kāi)和關(guān)閉寄存器和標(biāo)志的顯示。默認(rèn)情況下,將顯示寄存器和標(biāo)志??梢允褂胮r、tr或.prompt_allow-reg命令禁用寄存器顯示。所有這三個(gè)命令都控制著相同的設(shè)置,您可以使用它們中的任何一個(gè)來(lái)覆蓋以前對(duì)這些命令的任何使用。也可以使用l-os命令禁用寄存器顯示。此設(shè)置與其他三個(gè)命令不同。要控制顯示哪些寄存器和標(biāo)志,請(qǐng)使用rm (Register Mask)命令。
StartAddress
指定執(zhí)行應(yīng)開(kāi)始的地址。如果不使用startaddress,則從指令指針指向的指令開(kāi)始執(zhí)行。
StopAddress
指定停止執(zhí)行的地址。此地址必須與指令的確切地址匹配。
Command
指定要在執(zhí)行步驟后執(zhí)行的調(diào)試器命令。此命令在顯示標(biāo)準(zhǔn)p結(jié)果之前執(zhí)行。如果還使用count,則在所有步驟完成后(但在顯示最后一步的結(jié)果之前)執(zhí)行指定的命令。
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命令使目標(biāo)開(kāi)始執(zhí)行。此執(zhí)行將繼續(xù),直到到達(dá)指定的指令或遇到斷點(diǎn)。如果在內(nèi)核模式下使用此命令,則當(dāng)在任何虛擬地址空間中的指定虛擬地址處遇到指令時(shí),執(zhí)行將停止。在此執(zhí)行期間,所有步驟都將顯式顯示。被調(diào)用函數(shù)被視為單個(gè)單元。因此,此命令的顯示與重復(fù)執(zhí)行p(step)直到程序計(jì)數(shù)器到達(dá)指定地址時(shí)所看到的類(lèi)似。
例如,下面的命令顯式地遍歷目標(biāo)代碼,直到到達(dá)當(dāng)前函數(shù)的返回地址。
0:000> pa @$ra
下面的示例演示如何使用pa命令和kb命令來(lái)顯示堆棧跟蹤:
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命令執(zhí)行程序,直到到達(dá)調(diào)用指令。
用戶模式:
[~Thread] pc [r] [= StartAddress] [Count]
內(nèi)核模式:
pc [r] [= StartAddress] [Count]
參數(shù):
Thread
指定要繼續(xù)執(zhí)行的線程。所有其他線程都被凍結(jié)。只能在用戶模式下指定線程。
r
打開(kāi)和關(guān)閉寄存器和標(biāo)志的顯示。默認(rèn)情況下,將顯示寄存器和標(biāo)志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器顯示。所有這三個(gè)命令都控制著相同的設(shè)置,您可以使用它們中的任何一個(gè)來(lái)覆蓋以前對(duì)這些命令的任何使用。也可以使用l-os命令禁用寄存器顯示。此設(shè)置與其他三個(gè)命令不同。要控制顯示哪些寄存器和標(biāo)志,請(qǐng)使用rm (Register Mask)命令。
StartAddress
指定調(diào)試器開(kāi)始執(zhí)行的地址。否則,調(diào)試器從指令指針指向的指令開(kāi)始。
Count
指定調(diào)試器要停止此命令必須遇到的調(diào)用指令數(shù)。默認(rèn)值為1。
pc命令使目標(biāo)開(kāi)始執(zhí)行。此執(zhí)行將繼續(xù),直到達(dá)到調(diào)用指令或遇到斷點(diǎn)。如果程序計(jì)數(shù)器已經(jīng)在調(diào)用指令上,則執(zhí)行整個(gè)調(diào)用。返回此調(diào)用后,將繼續(xù)執(zhí)行,直到到達(dá)另一個(gè)調(diào)用。這個(gè)調(diào)用的執(zhí)行,而不是跟蹤,是pc和tc(跟蹤到下一個(gè)調(diào)用)之間的唯一區(qū)別。在源代碼模式下,可以將一個(gè)源代碼行與多個(gè)程序集指令相關(guān)聯(lián)。pc命令不會(huì)在與當(dāng)前源行關(guān)聯(lián)的調(diào)用指令處停止。
ph (Step to Next Branching Instruction)
ph命令執(zhí)行程序,直到到達(dá)任何類(lèi)型的分支指令,包括條件或無(wú)條件分支、調(diào)用、返回和系統(tǒng)調(diào)用。
用戶模式:
[~Thread] ph [r] [= StartAddress] [Count]
內(nèi)核模式:
ph [r] [= StartAddress] [Count]
參數(shù):
Thread
指定要繼續(xù)執(zhí)行的線程。所有其他線程都被凍結(jié)。只能在用戶模式下指定線程。
r
打開(kāi)和關(guān)閉寄存器和標(biāo)志的顯示。默認(rèn)情況下,將顯示寄存器和標(biāo)志??梢允褂胮r、tr或.prompt_allow-reg命令禁用寄存器顯示。所有這三個(gè)命令都控制著相同的設(shè)置,您可以使用它們中的任何一個(gè)來(lái)覆蓋以前對(duì)這些命令的任何使用。也可以使用l-os命令禁用寄存器顯示。此設(shè)置與其他三個(gè)命令不同。要控制顯示哪些寄存器和標(biāo)志,請(qǐng)使用rm (Register Mask)命令。
StartAddress
指定調(diào)試器開(kāi)始執(zhí)行的地址。否則,調(diào)試器從指令指針指向的指令開(kāi)始。
Count
指定要停止此命令必須遇到的分支指令數(shù)。默認(rèn)值為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命令使目標(biāo)開(kāi)始執(zhí)行。此執(zhí)行將繼續(xù)執(zhí)行,直到達(dá)到分支指令或遇到斷點(diǎn)為止。如果程序計(jì)數(shù)器已經(jīng)在分支指令上,則執(zhí)行整個(gè)分支指令。返回此分支指令后,繼續(xù)執(zhí)行,直到到達(dá)另一個(gè)分支指令。調(diào)用的這種執(zhí)行而不是跟蹤是ph和th(跟蹤到下一個(gè)分支指令)之間的唯一區(qū)別。在源模式下,可以將一個(gè)源行與多個(gè)匯編指令關(guān)聯(lián)。ph命令不會(huì)在與當(dāng)前源行關(guān)聯(lián)的分支指令處停止。
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命令執(zhí)行程序,直到達(dá)到返回指令。
用戶模式:
[~Thread] pt [r] [= StartAddress] [Count] ["Command"]
內(nèi)核模式:
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"]
參數(shù):
Thread
指定要繼續(xù)執(zhí)行的線程。所有其他線程都被凍結(jié)。只能在用戶模式下指定線程。
r
打開(kāi)和關(guān)閉寄存器和標(biāo)志的顯示。默認(rèn)情況下,將顯示寄存器和標(biāo)志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器顯示。所有這三個(gè)命令都控制著相同的設(shè)置,您可以使用它們中的任何一個(gè)來(lái)覆蓋以前對(duì)這些命令的任何使用。也可以使用l-os命令禁用寄存器顯示。此設(shè)置與其他三個(gè)命令不同。要控制顯示哪些寄存器和標(biāo)志,請(qǐng)使用rm (Register Mask)命令。
StartAddress
指定調(diào)試器開(kāi)始執(zhí)行的地址。否則,調(diào)試器從指令指針指向的指令開(kāi)始。
Count
指定要停止此命令必須遇到的返回指令數(shù)。默認(rèn)值為1。
Command
指定要在執(zhí)行步驟后執(zhí)行的調(diào)試器命令。此命令在顯示標(biāo)準(zhǔn)pt結(jié)果之前執(zhí)行。如果還使用count,則在所有步驟完成后(但在顯示最后一步的結(jié)果之前)執(zhí)行指定的命令。
pt命令將導(dǎo)致目標(biāo)開(kāi)始執(zhí)行。 此執(zhí)行將繼續(xù),直至返回達(dá)到指令或遇到斷點(diǎn)。如果已經(jīng)打開(kāi)的程序計(jì)數(shù)器返回執(zhí)行指令,整個(gè)返回。 返回此返回后,執(zhí)行將繼續(xù),直到另一個(gè)返回為止。 此執(zhí)行,而不是跟蹤,在調(diào)用之間的唯一區(qū)別是pt并 tt (到下一步返回的 Trace)。源模式中,可以將一個(gè)源行與多個(gè)程序集指令相關(guān)聯(lián)。 pt命令不會(huì)停止處返回與當(dāng)前的源行相關(guān)聯(lián)的指令。
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命令執(zhí)行程序,直到它到達(dá)調(diào)用指令或返回指令。
用戶模式:
[~Thread] pct [r] [= StartAddress] [Count]
內(nèi)核模式:
pct [r] [= StartAddress] [Count]
參數(shù):
Thread
指定要繼續(xù)執(zhí)行的線程。所有其他線程都被凍結(jié)。只能在用戶模式下指定線程。
r
打開(kāi)和關(guān)閉寄存器和標(biāo)志的顯示。默認(rèn)情況下,將顯示寄存器和標(biāo)志??梢允褂胮r、tr或.prompt_allow-reg命令禁用寄存器顯示。所有這三個(gè)命令都控制著相同的設(shè)置,您可以使用它們中的任何一個(gè)來(lái)覆蓋以前對(duì)這些命令的任何使用。也可以使用l-os命令禁用寄存器顯示。此設(shè)置與其他三個(gè)命令不同。要控制顯示哪些寄存器和標(biāo)志,請(qǐng)使用rm (Register Mask)命令。
StartAddress
指定調(diào)試器開(kāi)始執(zhí)行的地址。否則,調(diào)試器從指令指針指向的指令開(kāi)始。
Count
指定要停止此命令必須遇到的調(diào)用或返回指令數(shù)。默認(rèn)值為1。
pct命令使目標(biāo)開(kāi)始執(zhí)行。此執(zhí)行將繼續(xù),直到達(dá)到調(diào)用或返回指令或遇到斷點(diǎn)為止。如果程序計(jì)數(shù)器已經(jīng)在調(diào)用或返回指令上,則執(zhí)行整個(gè)調(diào)用或返回。返回此調(diào)用或返回后,將繼續(xù)執(zhí)行,直到到達(dá)另一個(gè)調(diào)用或返回為止。這個(gè)調(diào)用的執(zhí)行,而不是跟蹤,是pct和tct(跟蹤到下一個(gè)調(diào)用或返回)之間的唯一區(qū)別。在源代碼模式下,可以將一個(gè)源代碼行與多個(gè)程序集指令相關(guān)聯(lián)。pct命令不會(huì)在與當(dāng)前源代碼行關(guān)聯(lián)的調(diào)用或返回指令處停止。
總結(jié)
以上是生活随笔為你收集整理的WinDbg常用命令系列---单步执行p*的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: monk js_对象检测-使用Monk
- 下一篇: linux服务器系统盘坏且系统盘为软ra