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命令不會在與當前源代碼行關聯的調用或返回指令處停止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM