日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

發布時間:2023/12/19 综合教程 24 生活家
生活随笔 收集整理的這篇文章主要介紹了 WinDbg常用命令系列---断点操作b* 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ba (Break on Access)

ba命令設置處理器斷點(通常稱為數據斷點,不太準確)。此斷點在訪問指定內存時觸發。

用戶模式下

[~Thread] ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]

內核模式下

ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]

參數:

Thread
指定斷點應用于的線程

ID
指定標識斷點的可選數字。如果不指定ID,則使用第一個可用的斷點編號。您不能在BA和ID號之間添加空格。每個處理器只支持有限數量的處理器斷點,但對ID號的值沒有限制。如果將ID括在方括號([])中,則ID可以包含任何表達式。
Access
指定滿足斷點的訪問類型。此參數可以是以下值之一。

Option 操作

e (執行)

當 CPU 檢索一條指令從指定的地址時進入調試器。

r (讀/寫)

當 CPU 讀取或寫入指定地址處時進入調試器。

w (寫入)

進入調試器,當 CPU 將在指定的地址。

i (i/o)

(內核模式下唯一的、 基于 x86 的系統僅)在指定 I/O 端口時中斷到調試器地址訪問。



Size
指定要監視訪問的位置的大?。ㄒ宰止潪閱挝唬?。在基于x86的處理器上,此參數可以是1、2或4。但是,如果access等于e,則大小必須為1。在基于x64的處理器上,此參數可以是1、2、4或8。但是,如果access等于e,則大小必須為1。

Options

指定斷點選項。您可以使用以下任意數量的選項,除非另有說明:

/1
創建一個“一次性”斷點。觸發此斷點后,將從斷點列表中永久刪除該斷點。

/p EProcess
(僅限內核模式)指定與此斷點關聯的進程。eprocess應該是eprocess結構的實際地址,而不是pid。只有在此進程上下文中遇到斷點時才會觸發斷點。

/t EThread
(僅限內核模式)指定與此斷點關聯的線程。ethread應該是ethread結構的實際地址,而不是線程ID。只有在該線程的上下文中遇到斷點時才會觸發斷點。如果使用/p eprocess和/t ethread,可以按任意順序輸入它們。

/c MaxCallStackDepth
僅當調用堆棧深度小于MaxCallStackDepth時,才會使斷點處于活動狀態。您不能將此選項與/C組合在一起。

/C MinCallStackDepth
僅當調用堆棧深度大于MinCallStackDepth時,才會使斷點處于活動狀態。您不能將此選項與/c組合在一起。

Address
指定任何有效地址。如果應用程序訪問在此地址的內存,調試器將停止執行,并顯示所有寄存器和標志的當前值。 此地址必須是偏移量并適當對齊到匹配大小參數。 (例如,如果大小為 4,地址必須是 4 的倍數。)如果省略地址,使用當前指令指針。


Passes
指定斷點在激活之前經過的次數。這個數字可以是任何16位值。程序計數器在不中斷的情況下通過此點的次數小于此數字的值。因此,省略這個數字等于將其設置為1。還要注意,這個數字只計算應用程序執行超過這一點的次數。步進或跟蹤超過此點不算數。達到完整計數后,只能通過清除并重置斷點來重置此數字。

CommandString
指定每次遇到指定次數的斷點時要執行的命令列表。只有在發出g(go)命令后命中斷點,而不是在t(trace)或p(step)命令后,才會執行這些命令。commandString中的調試器命令可以包含參數。必須將此命令字符串括在引號中,并且應使用分號分隔多個命令。您可以使用標準的C控制字符(例如
和”)。包含在二級引號(“)中的分號被解釋為嵌入的帶引號字符串的一部分。

調試器使用ID號來引用后面的bc(斷點清除)、bd(斷點禁用)和be(斷點啟用)命令中的斷點。使用bl(斷點列表)命令列出所有現有斷點及其ID號和狀態。使用.bpcmds(顯示斷點命令)命令列出所有現有斷點、它們的ID號以及用于創建它們的命令。每個處理器斷點都有一個與其關聯的大小。例如,W(寫)處理器斷點可以設置在地址0x70001008處,大小為4個字節。這將監視從0x70001008到0x7000100B(包括)的地址塊。如果寫入此內存塊,將觸發斷點。處理器可能在與指定區域重疊但不相同的內存區域上執行操作。在本例中,包含范圍0x70001000到0x7000100F的單個寫入操作,或僅包含0x70001009處字節的寫入操作,將是重疊操作。在這種情況下,是否觸發斷點取決于處理器。您應該參考處理器手冊了解具體細節。要獲取一個特定的實例,在x86處理器上,只要訪問范圍與斷點范圍重疊,就會觸發讀或寫斷點。同樣,如果在地址0x004001003上設置了E(執行)斷點,然后執行跨越地址0x004001002和0x004001003的雙字節指令,則結果取決于處理器。同樣,有關詳細信息,請參閱處理器體系結構手冊。處理器區分用戶模式調試器設置的斷點和內核模式調試器設置的斷點。用戶模式處理器斷點不影響任何內核模式進程。內核模式處理器斷點可能會影響用戶模式進程,具體取決于用戶模式代碼是否使用調試寄存器狀態以及是否連接了用戶模式調試器。要將當前進程的現有數據斷點應用到不同的寄存器上下文,請使用.apply-dbp(將數據斷點應用到上下文)命令。在多處理器計算機上,每個處理器斷點應用于所有處理器。例如,如果當前處理器是3,并且使用命令ba e1 myaddress在myaddress處放置斷點,那么在該地址處執行的任何處理器(不僅是處理器3)都會觸發斷點。(這也適用于軟件斷點。)不能在同一地址創建多個處理器斷點,這些斷點的commandString值不同。但是,可以在具有不同限制的同一地址創建多個斷點(例如,/p、/t、/c和/c選項的不同值)。

以下示例顯示了ba命令。下面的命令設置一個斷點,用于讀取變量myvar的4個字節的訪問權限。

0:000> ba r4 myVar

以下命令在地址從0x3f8到0x3fb的所有串行端口上添加斷點。如果有任何內容被讀取或寫入這些端口,則會觸發此斷點。

kd> ba i4 3f8

bc (Breakpoint Clear)

bc命令將從系統中永久刪除以前設置的斷點。

bc Breakpoints 

參數:

Breakpoints
指定要刪除的斷點的ID號。可以指定任意數量的斷點。必須用空格或逗號分隔多個ID??梢允褂眠B字符(-)指定斷點ID的范圍??梢允褂眯翘枺?)指示所有斷點。如果要對ID使用數值表達式,請將其括在括號([])中。如果要使用帶有通配符的字符串來匹配斷點的符號名,請將其括在引號中。

使用bl (Breakpoint List)命令列出所有現有斷點及其ID號和狀態。使用.bpcmds (Display Breakpoint Commands)命令列出所有現有斷點、它們的ID號以及用于創建它們的命令。

bd (Breakpoint Disable)

bd命令禁用但不刪除以前設置的斷點。

bd Breakpoints

參數:

Breakpoints
指定要禁用的斷點的ID號。可以指定任意數量的斷點。必須用空格或逗號分隔多個ID??梢允褂眠B字符(-)指定斷點ID的范圍??梢允褂眯翘枺?)指示所有斷點。如果要對ID使用數值表達式,請將其括在括號([])中。如果要使用帶有通配符的字符串來匹配斷點的符號名,請將其括在引號(“”)中。

禁用斷點時,系統不檢查斷點中指定的條件是否有效。使用be (Breakpoint Enable)命令重新啟用禁用的斷點。使用bl (Breakpoint List)命令列出所有現有斷點及其ID號和狀態。使用.bpcmds (Display Breakpoint Commands)命令列出所有現有斷點、它們的ID號以及用于創建它們的命令。

be (Breakpoint Enable)

be命令恢復以前禁用的一個或多個斷點。

be Breakpoints 

Breakpoints
指定要禁用的斷點的ID號??梢灾付ㄈ我鈹盗康臄帱c。必須用空格或逗號分隔多個ID??梢允褂眠B字符(-)指定斷點ID的范圍??梢允褂眯翘枺?)指示所有斷點。如果要對ID使用數值表達式,請將其括在括號([])中。如果要使用帶有通配符的字符串來匹配斷點的符號名,請將其括在引號(“”)中。

bl (Breakpoint List)

bl命令列出有關現有斷點的信息。

bl [/L] [Breakpoints]

參數:

/L
強制BL始終顯示斷點地址,而不是顯示源文件和行號。

Breakpoints
指定要列出的斷點的ID號。如果省略斷點,調試器將列出所有斷點。可以指定任意數量的斷點。必須用空格或逗號分隔多個ID??梢允褂眠B字符(-)指定斷點ID的范圍。可以使用星號(*)指示所有斷點。如果要對ID使用數值表達式,請將其括在括號([])中。如果要使用帶有通配符的字符串來匹配斷點的符號名,請將其括在引號中。

對于每個斷點,命令顯示以下信息:

斷點ID。此ID是一個十進制數字,可用于在以后的命令中引用斷點。
斷點狀態。狀態可以是E(啟用)或D(禁用)。
(僅限未解析的斷點)如果斷點未解析,則顯示字母“U”。也就是說,斷點與當前加載的任何模塊中的符號引用都不匹配。
構成斷點位置的虛擬地址或符號表達式。如果啟用了源行號加載,BL命令將顯示文件和行號信息,而不是地址偏移量。如果斷點未解析,則在此處省略該地址,并顯示在列表的末尾。
(僅限數據斷點)顯示數據斷點的類型和大小信息。類型可以是E(執行)、R(讀/寫)、W(寫)或I(輸入/輸出)。這些類型后面是塊的大?。ㄒ宰止潪閱挝唬?。
在激活斷點之前保持的傳遞數,后跟括號中的初始傳遞數。
關聯的進程和線程。如果線程被指定為三個星號(“***”),則此斷點不是線程特定的斷點。
與斷點地址相對應的具有偏移量的模塊和函數。如果斷點未解析,則斷點地址將顯示在此處,并顯示在括號中。如果在有效地址上設置了斷點,但缺少符號信息,則此字段為空。
命中此斷點時自動執行的命令。此命令以引號顯示。

如果不確定使用什么命令設置現有斷點,請使用.bpcmds(顯示斷點命令)列出所有斷點以及用于創建斷點的命令。下面的示例顯示了BL命令的輸出。

0:000> bl
0 e 010049e0     0001 (0001)  0:**** stst!main

此輸出包含一下信息:

斷點ID為0。
斷點狀態為E(啟用)。
斷點未解析(輸出中沒有u)。
斷點的虛擬地址是010049e0。
第一次通過代碼時斷點處于活動狀態,代碼尚未在調試器下執行。“剩余通過”計數器中的值為1(0001),初始“剩余通過”計數器中的值為1((0001))。
此斷點不是線程特定的斷點(****)。
斷點設置在STST模塊的MAIN上。

duàndiǎn點 I D 。 此 I D shìshíjìnzhìshù字 , yòngzàihòudemìnglìngzhōngyǐnyòngduàndiǎn點 。

bp, bu, bm (Set Breakpoint)

The breakpoint status. The status can be e (enabled) or d (disabled).

bp、bu和bm命令設置一個或多個軟件斷點。您可以組合位置、條件和選項來設置不同類型的軟件斷點。

duàndiǎnzhuàngtài態 。 zhuàngtàishì是 E ( yòng用 ) huò或 D ( jìnyòng用 ) 。

用戶模式:

[~Thread] bp[ID] [Options] [Address [Passes]] ["CommandString"] 
[~Thread] bu[ID] [Options] [Address [Passes]] ["CommandString"] 
[~Thread] bm [Options] SymbolPattern [Passes] ["CommandString"]

內核模式:

bp[ID] [Options] [Address [Passes]] ["CommandString"] 
bu[ID] [Options] [Address [Passes]] ["CommandString"] 
bm [Options] SymbolPattern [Passes] ["CommandString"]

參數:

Thread
指定斷點應用于的線程。只能在用戶模式下指定線程。如果不指定線程,則斷點將應用于所有線程。

ID

指定標識斷點的十進制數字。 調試器在創建斷點時分配ID,但您可以使用br(斷點重新編號)命令更改它??梢允褂迷揑D在以后的調試器命令中引用斷點。要顯示斷點的ID,請使用bl(斷點列表)命令。在命令中使用ID時,不要在命令(bp或bu)和ID號之間鍵入空格。ID參數始終是可選的。如果不指定ID,調試器將使用第一個可用的斷點編號。在內核模式下,只能設置32個斷點。在用戶模式下,可以設置任意數量的斷點。在這兩種情況下,ID號的值都沒有限制。如果將ID括在方括號([])中,則ID可以包含任何表達式。

Options

zhǐdìngbiāoshíduàndiǎndeshíjìnzhìshù字 。

指定斷點選項。您可以指定以下任意數量的選項,除非另有說明:

/1
創建"單穩"斷點。 觸發此斷點后,它是從斷點列表中刪除。

/f PredNum
(基于 Itanium 的僅限用戶僅模式)指定的謂詞的數字。 斷點都與相應的謂詞寄存器。 (例如, bp /f 4 地址設置的前提是使用斷點p4謂詞寄存器。)

/p EProcess
(僅內核模式)指定與此斷點關聯的進程。 EProcess應為 EPROCESS 結構,不 PID 的實際地址。 僅當遇到此進程的上下文中觸發斷點。

/t EThread
(僅內核模式)指定與此斷點關聯的線程。 EThread應的實際地址 ETHREAD 結構,不是線程 id。 僅當遇到此線程的上下文中觸發斷點。 如果您使用 /p EProcess/t EThread,可以按任意順序輸入它們。

/c MaxCallStackDepth
僅當調用堆棧深度為時激活該斷點小于MaxCallStackDepth。 不能使用此選項一起使用 /C

/C MinCallStackDepth
僅當調用堆棧深度大于激活斷點MinCallStackDepth。 不能使用此選項一起使用 /c。

/a
(有關bm僅) 上的所有指定的位置中,設置斷點,不管它們是在數據空間或代碼空間。 數據上的斷點可能會導致程序失敗,因為使用此選項僅在已知安全的位置上。

/d
(有關bm僅) 將斷點位置轉換為地址。 因此,如果移動代碼,這些斷點會保留在相同的地址,而不是被設置為根據SymbolPattern。 使用 /d以避免重新計算對斷點的更改,當加載或卸載模塊。

/(
(有關bm僅) 包括在符號中的參數列表信息字符串SymbolString定義。

此功能,可對具有相同名稱但不同的參數列表的重載函數設置斷點。 例如,bm / (myFunc 上設置斷點myFunc(int a)myFunc(char a) 。 無需"/ (", 設置一個斷點myFunc失敗,因為它并不表示該myFunc斷點適用于函數。


/w dx 對象表達式設置條件斷點基于 dx 對象表達式返回的布爾值。 參數是一個數據模型 (dx) 表達式的計算結果為 true (與匹配條件 – 中斷) 或 false (不匹配條件 – 不會中斷)。

The debugger assigns the ID when it creates the breakpoint, but you can change it by using the br (Breakpoint Renumber) command. You can use the ID to refer to the breakpoint in later debugger commands. To display the ID of a breakpoint, use the bl (Breakpoint List) command.

Address
指定設置斷點的指令的第一個字節。如果省略地址,則使用當前的指令指針。
Passes

具體說明執行通過的次數,該斷點被激活。解調器滑雪的斷點位置直到它達到特定的通行證。通行證的價值可以是16位或32位。由于缺陷,斷點是第一次激活應用程序執行包含斷點位置的碼。這一缺陷相當于1個乘客的價值。只有在應用程序執行后,至少一次激活斷點,輸入兩個或更多的值。例如,在執行代碼的第二時間,兩個激活斷點的值。 這個參數創建了一個計數器,該計數器在每一次通過該代碼時都被解碼。要查看過程計數器的初始值和當前值,請使用bl(斷點列表)。只有當應用程序執行者通過斷點響應于G(GO)命令時,才解碼輸出計數器。如果你正在通過代碼或跟蹤它,則計數器不是消失。當通行計數器到達1時,你只能清晰地重置它,并重新安排斷點。

CommandString

指定每次遇到指定次數的斷點時執行的命令列表。必須將commandString參數括在引號中。使用分號分隔多個命令。commandString中的調試器命令可以包含參數。您可以使用標準的C控制字符(例如
和”)。包含在二級引號(“)中的分號被解釋為嵌入的帶引號字符串的一部分。只有在應用程序響應g(go)命令執行時到達斷點時,才會執行commandstring命令。如果您正在單步執行代碼或跟蹤超過此點,則不會執行命令。在斷點(如g或t)之后恢復程序執行的任何命令結束命令列表的執行。

SymbolPattern
指定圖案。調試器嘗試將此模式與現有符號匹配,并在所有模式匹配項上設置斷點。符號模式可以包含各種通配符和說明符。因為這些字符與符號匹配,所以匹配不區分大小寫,單個前導下劃線(u)表示任意數量的前導下劃線。

zhǐdìngměidàozhǐdìngshùdeduàndiǎnshízhíxíngdemìnglìnglièbiǎo表 。 jiàng將 c o m m a n d S t r i n g cānshùkuòzàiyǐnhàozhōng中 。 shǐ使 yòngfēnhàofēnduōmìnglìng令 。

tiáo調 shìzàichuàngjiànduàndiǎnshífēnpèi配 I D , dànnínshǐ使 yòng用 b r ( duàndiǎnchóngxīnbiānhào號 ) mìnglìnggēnggǎi它 。 shǐ使 yònggāi該 I D zàihòudetiáo調 shìmìnglìngzhōngyǐnyòngduàndiǎn點 。 yàoxiǎnshìduàndiǎnde的 I D , qǐngshǐ使 yòng用 b l ( duàndiǎnlièbiǎo表 ) mìnglìng令 。

(Unresolved breakpoints only) The letter "u" appears if the breakpoint is unresolved. That is, the breakpoint does not match a symbolic reference in any currently loaded module. For information about these breakpoints, see Unresolved Breakpoints (bu Breakpoints).

bp、bu和bm命令設置了新的斷點,但它們具有不同的特性:

bp(set breakpoint)命令在命令中指定的斷點位置的地址處設置新的斷點。如果設置斷點時調試器無法解析斷點位置的地址表達式,則BP斷點將自動轉換為BU斷點。使用bp命令創建一個斷點,如果卸載模塊,該斷點將不再處于活動狀態。
bu(set unresolved breakpoint)命令設置延遲或未解析的斷點。BU斷點設置在對斷點位置的符號引用上,該斷點位置在命令中指定(不在地址上),并且在解析具有引用的模塊時激活。有關這些斷點的詳細信息,請參閱未解析斷點(BU斷點)。
bm(set symbol breakpoint)命令在符合指定模式的符號上設置新的斷點。此命令可以創建多個斷點。默認情況下,匹配模式后,BM斷點與BU斷點相同。也就是說,BM斷點是在符號引用上設置的延遲斷點。但是,bm/d命令創建一個或多個bp斷點。每個斷點都設置在匹配位置的地址上,不跟蹤模塊狀態。

b p ( s e t b r e a k p o i n t ) mìnglìngzàimìnglìngzhōngzhǐdìngdeduàndiǎnwèizhidezhǐchùshèzhìxīndeduàndiǎn點 。 guǒshèzhìduàndiǎnshítiáo調 shìjiěduàndiǎnwèizhidezhǐbiǎoshì式 , 則 B P duàndiǎnjiàngdòngzhuǎnhuànwéi為 B U duàndiǎn點 。 shǐ使 yòng用 b p mìnglìngchuàngjiànduàndiǎn點 , guǒxièzǎikuài塊 , gāiduàndiǎnjiàngzàichǔhuódòngzhuàngtài態 。

如果不確定使用什么命令設置現有斷點,請使用.bpcmds(顯示斷點命令)列出所有斷點以及用于創建斷點的命令。BP斷點和BU斷點有三個主要區別:

BP斷點位置始終轉換為地址。如果模塊更改移動了設置bp斷點的代碼,則斷點保持在同一地址。另一方面,bu斷點仍然與所使用的符號值(通常是符號加上偏移量)相關聯,即使其地址更改,它也會跟蹤這個符號位置。

如果在加載的模塊中找到bp斷點地址,并且稍后卸載該模塊,則將從斷點列表中刪除該斷點。另一方面,在重復卸載和加載之后,bu斷點仍然存在。

使用bp設置的斷點不會保存在windbg工作區中。使用bu設置的斷點保存在工作區中。

B P duàndiǎnwèizhishǐzhōngzhuǎnhuànwéizhǐ址 。 guǒkuàigēnggǎidòngleshèzhì置 b p duàndiǎndedài碼 , duàndiǎnbǎochízàitóngzhǐ址 。 lìngfāngmiàn面 , b u duàndiǎnréngránsuǒshǐ使 yòngdehàozhí值 ( tōngchángshìhàojiāshàngpiānliàng量 ) xiāngguānlián聯 , shǐ使 zhǐgēnggǎi改 , huìgēnzōngzhègehàowèizhi置 。

當希望在符號模式中使用通配符作為斷點時,bm命令非常有用。bm符號模式語法相當于使用x符號模式,然后對每個結果使用bu。例如,要在myprogram模塊中以字符串“mem”開頭的所有符號上設置斷點,請使用以下命令。

0:000> bm myprogram!mem* 
  4: 0040d070 MyProgram!memcpy
 5: 0040c560 MyProgram!memmove
  6: 00408960 MyProgram!memset

由于bm命令設置軟件斷點(而不是處理器斷點),因此在設置斷點時,它會自動排除數據位置,以避免損壞數據。使用bp或bm/a命令時,可以指定數據地址而不是程序地址。但是,即使指定了數據位置,這些命令也會創建軟件斷點,而不是處理器斷點。如果將軟件斷點放置在程序數據中而不是可執行代碼中,則可能導致數據損壞。因此,只有在確定存儲在該位置的內存將用作可執行代碼而不是程序數據時,才應在數據位置中使用這些命令。否則,您應該改用ba(break on access)命令。如果單個邏輯源行跨越多個物理行,則在語句或調用的最后一個物理行上設置斷點。如果調試器無法在請求的位置設置斷點,它會將斷點置于下一個允許的位置。如果指定線程,則在指定的線程上設置斷點。例如,~*bp命令在所有線程上設置斷點,~ bp在導致當前異常的線程上設置斷點,~123bp在線程123上設置斷點。~bp和~.bp命令都在當前線程上設置了斷點。在內核模式下調試多處理器系統時,使用bp或ba(訪問中斷)設置的斷點將應用于所有處理器。例如,如果當前處理器為3,并且鍵入bp memoryaddress以在memoryaddress處放置斷點。在該地址執行的任何處理器(不僅是處理器3)都會導致斷點陷阱。bp、bu和bm命令通過用break指令替換處理器指令來設置軟件斷點。要調試只讀代碼或無法更改的代碼,請使用ba e命令,其中e表示僅執行訪問。

以下命令將斷點設置為超過函數mytest開頭12個字節。前六次通過代碼時忽略此斷點,但第七次通過代碼時停止執行。

If a bp breakpoint address is found in a loaded module, and if that module is later unloaded, the breakpoint is removed from the breakpoint list. On the other hand, bu breakpoints persist after repeated unloads and loads.

0:000> bp MyTest+0xb 7 

以下命令在rtlraiseexception處設置斷點,顯示EAX寄存器,顯示符號myvar的值,然后繼續。

Breakpoints that you set with bp are not saved in WinDbg workspaces. Breakpoints that are set with bu are saved in workspaces.

kd> bp ntdll!RtlRaiseException "r eax; dt MyVar; g"

以下兩個bm命令設置了三個斷點。執行命令時,顯示的結果不區分使用/d開關創建的斷點和不使用/d開關創建的斷點。.bpcmds(顯示斷點命令)可用于區分這兩種類型。如果斷點是由BM在沒有/D開關的情況下創建的,.bpcmds顯示將斷點類型指示為bu,后跟@?。?ldquo;中包含的計算符號。”標記(表示它是文字符號而不是數字表達式或寄存器)。如果斷點是由bm使用/d開關創建的,.bpcmds顯示將斷點類型指示為bp。

The bu (Set Unresolved Breakpoint) command sets a deferred or unresolved breakpoint. A bu breakpoint is set on a symbolic reference to the breakpoint location that is specified in the command (not on an address) and is activated whenever the module with the reference is resolved. For more information about these breakpoints, see Unresolved Breakpoints (bu Breakpoints).

0:000> bm myprog!openf* 
  0: 00421200 @!"myprog!openFile"
  1: 00427800 @!"myprog!openFilter"

0:000> bm /d myprog!closef* 
  2: 00421600 @!"myprog!closeFile"

0:000> .bpcmds
bu0 @!"myprog!openFile";
bu1 @!"myprog!openFilter";
bp2 0x00421600 ;

br (Breakpoint Renumber)

b u ( s e t u n r e s o l v e d b r e a k p o i n t ) mìnglìngshèzhìyánchíhuòwèijiědeduàndiǎn點 。 B U duàndiǎnshèzhìzàiduìduàndiǎnwèizhidehàoyǐnyòngshàng上 , gāiduàndiǎnwèizhizàimìnglìngzhōngzhǐdìng定 ( zàizhǐshàng上 ) , bìngqiězàijiěyǒuyǐnyòngdekuàishíhuó活 。 yǒuguānzhèxiēduàndiǎndexiángxìn息 , qǐngcānyuèwèijiěduàndiǎn點 ( B U duàndiǎn點 ) 。

br命令重新編號一個或多個斷點。

br OldID NewID [OldID2 NewID2 ...] 

參數:

OldID
指定斷點的當前ID號。

NewID
指定成為斷點ID的新數字。

The bm (Set Symbol Breakpoint) command sets a new breakpoint on symbols that match a specified pattern. This command can create more than one breakpoint. By default, after the pattern is matched, bm breakpoints are the same as bu breakpoints. That is, bm breakpoints are deferred breakpoints that are set on a symbolic reference. However, a bm /d command creates one or more bp breakpoints. Each breakpoint is set on the address of a matched location and does not track module state.

可以使用br命令同時對任意數量的斷點重新編號。對于每個斷點,按該順序列出舊ID和新ID作為br的參數。如果已經有一個ID等于newID的斷點,則該命令將失敗,并顯示一條錯誤消息。

nínshǐ使 yòng用 b r mìnglìngtóngshíduìrènshùliàngdeduàndiǎnchóngxīnbiānhào號 。 duìměiduàndiǎn點 , àngāishùnlièchūjiù舊 I D xīn新 I D zuòwéi為 b r decānshù數 。

bs (Update Breakpoint Command)

If there is already a breakpoint with an ID equal to NewID, the command fails and an error message is displayed.

bs命令更改遇到指定斷點時執行的命令。

bs ID ["CommandString"] 

參數:

ID
指定斷點的ID號。

CommandString

指定每次遇到斷點時要執行的新命令列表。必須將commandString參數括在引號中。使用分號分隔多個命令。commandString中的調試器命令可以包含參數。您可以使用標準的C控制字符(例如
和”)。包含在二級引號(“)中的分號被解釋為嵌入的帶引號字符串的一部分。只有在應用程序響應g(go)命令執行時到達斷點時,才會執行commandstring命令。如果您正在單步執行代碼或跟蹤超過此點,則不會執行命令。在斷點(如g或t)之后恢復程序執行的任何命令結束命令列表的執行。

zhǐdìngměidàoduàndiǎnshíyàozhíxíngdexīnmìnglìnglièbiǎo表 。 jiàng將 c o m m a n d S t r i n g cānshùkuòzàiyǐnhàozhōng中 。 shǐ使 yòngfēnhàofēnduōmìnglìng令 。

jǐnxiànwèijiědeduàndiǎn點 ) guǒduàndiǎnwèijiě析 , xiǎnshì母 “ U ” 。 jiùshìshuō說 , duàndiǎndāngqiánjiāzàiderènkuàizhōngdehàoyǐnyòngdōupèi配 。 yǒuguānzhèxiēduàndiǎndexìn息 , qǐngcānyuèwèijiěduàndiǎn點 ( B U duàndiǎn點 ) 。

如果未指定commandstring,則將刪除斷點上已設置的所有命令。

The virtual address or symbolic expression that makes up the breakpoint location. If you enabled source line number loading, the bl command displays file and line number information instead of address offsets. If the breakpoint is unresolved, the address is omitted here and appears at the end of the listing instead.

bsc (Update Conditional Breakpoint)

gòuchéngduàndiǎnwèizhidezhǐhuòhàobiǎoshì式 。 guǒyòngleyuánxínghàojiāzài載 , B L mìnglìngjiāngxiǎnshìwénjiànxínghàoxìn息 , érshìzhǐpiānliàng量 。 guǒduàndiǎnwèijiě析 , zàichùshěnglvègāizhǐ址 , bìngxiǎnshìzàilièbiǎodewěi尾 。

(Data breakpoints only) Type and size information are displayed for data breakpoints. The types can be e (execute), r (read/write), w (write), or i (input/output). These types are followed with the size of the block, in bytes. For information about these breakpoints, see Processor Breakpoints (ba Breakpoints).

bsc命令更改發生斷點的條件,或更改遇到指定條件斷點時執行的命令。

bsc ID Condition ["CommandString"] 

參數:

ID

指定斷點的ID號。

Condition
指定觸發斷點的條件。
CommandString
指定每次遇到斷點時要執行的新命令列表。必須將commandString參數括在引號中。使用分號分隔多個命令。commandString中的調試器命令可以包含參數。您可以使用標準的C控制字符(例如
和”)。包含在二級引號(“)中的分號被解釋為嵌入的帶引號字符串的一部分。只有在應用程序響應g(go)命令執行時到達斷點時,才會執行commandstring命令。如果您正在單步執行代碼或跟蹤超過此點,則不會執行命令。在斷點(如g或t)之后恢復程序執行的任何命令結束命令列表的執行。

zhǐdìngměidàoduàndiǎnshíyàozhíxíngdexīnmìnglìnglièbiǎo表 。 jiàng將 c o m m a n d S t r i n g cānshùkuòzàiyǐnhàozhōng中 。 shǐ使 yòngfēnhàofēnduōmìnglìng令 。

zhǐyǒuzàiyìngyòngchéngxiǎngyìng應 g ( g o ) mìnglìngzhíxíngshídàoduàndiǎnshí時 , cáihuìzhíxíng行 c o m m a n d s t r i n g mìnglìng令 。 guǒnínzhèngzàidānzhíxíngdàihuògēnzōngchāoguòdiǎn點 , huìzhíxíngmìnglìng令 。

Any command that resumes program execution after a breakpoint (such as g or t) ends the execution of the command list.

jǐnxiànshùduàndiǎn點 ) xiǎnshìshùduàndiǎndelèixíngxiǎoxìn息 。 lèixíngshì是 E ( zhíxíng行 ) 、 R ( 讀 / xiě寫 ) 、 W ( xiě寫 ) huò或 I ( shū入 / shūchū出 ) 。 zhèxiēlèixínghòumianshìkuàidexiǎo小 ( jiéwéidānwèi位 ) 。 yǒuguānzhèxiēduàndiǎndexìn息 , qǐngcānyuèchǔduàndiǎn點 ( B A duàndiǎn點 ) 。

如果未指定commandstring,則將刪除斷點上已設置的所有命令。使用帶有以下語法的bs(update breakpoint命令)命令也可以達到同樣的效果:

bs ID "j Condition 'CommandString'; 'gc'"

總結

以上是生活随笔為你收集整理的WinDbg常用命令系列---断点操作b*的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。