WinDbg常用命令系列---線程相關操作~*


~ (Thread Status)

波浪符(~)命令顯示指定線程或當前進程中所有線程的狀態。

~ Thread

 參數:

    • Thread
      指定要顯示的線程。如果省略此參數,將顯示所有線程。

環境:

模式

僅限用戶模式

目標

實時、 崩潰轉儲

平台

全部

可以在許多命令之前添加線程符號。下面的示例向您展示如何使用此命令。以下命令顯示所有線程狀態。
0:067> ~
   0  Id: 2854.2fe8 Suspend: 1 Teb: 00dfc000 Unfrozen
   1  Id: 2854.24c8 Suspend: 1 Teb: 00dff000 Unfrozen
   2  Id: 2854.1fd4 Suspend: 1 Teb: 00c02000 Unfrozen
   3  Id: 2854.1d60 Suspend: 1 Teb: 00c05000 Unfrozen
   4  Id: 2854.5ac Suspend: 1 Teb: 00c08000 Unfrozen
   5  Id: 2854.1504 Suspend: 1 Teb: 00c0e000 Unfrozen
   6  Id: 2854.3200 Suspend: 1 Teb: 00c11000 Unfrozen
   7  Id: 2854.290 Suspend: 1 Teb: 00c14000 Unfrozen
   8  Id: 2854.2fbc Suspend: 1 Teb: 00c26000 Unfrozen

 以下命令也顯示所有線程。

0:067> ~*
   0  Id: 2854.2fe8 Suspend: 1 Teb: 00dfc000 Unfrozen
      Start: DIYHome!WinMainCRTStartup (00a74f1b)
      Priority: 0  Priority class: 32  Affinity: ff
   1  Id: 2854.24c8 Suspend: 1 Teb: 00dff000 Unfrozen
      Start: ntdll!TppWorkerThread (77711440)
      Priority: 0  Priority class: 32  Affinity: ff
   2  Id: 2854.1fd4 Suspend: 1 Teb: 00c02000 Unfrozen
      Start: ntdll!TppWorkerThread (77711440)
      Priority: 0  Priority class: 32  Affinity: ff
   3  Id: 2854.1d60 Suspend: 1 Teb: 00c05000 Unfrozen
      Start: ntdll!TppWorkerThread (77711440)
      Priority: 0  Priority class: 32  Affinity: ff
   4  Id: 2854.5ac Suspend: 1 Teb: 00c08000 Unfrozen
      Start: ntdll!TppWorkerThread (77711440)
      Priority: 0  Priority class: 32  Affinity: ff
   5  Id: 2854.1504 Suspend: 1 Teb: 00c0e000 Unfrozen
      Start: ntdll!TppWorkerThread (77711440)
      Priority: 0  Priority class: 32  Affinity: ff
   6  Id: 2854.3200 Suspend: 1 Teb: 00c11000 Unfrozen
      Start: ntdll!TppWorkerThread (77711440)
      Priority: 0  Priority class: 32  Affinity: ff
   7  Id: 2854.290 Suspend: 1 Teb: 00c14000 Unfrozen
      Start: combase!CRpcThreadCache::RpcWorkerThreadEntry (74592460)
      Priority: 0  Priority class: 32  Affinity: ff
   8  Id: 2854.2fbc Suspend: 1 Teb: 00c26000 Unfrozen
      Start: nvoglv32!DrvValidateVersion+0x93e0 (690970c0)
      Priority: 0  Priority class: 32  Affinity: ff

可以看到顯示了更多的信息。

以下命令顯示當前活動的線程。

0:067> ~.
. 67  Id: 2854.1958 Suspend: 0 Teb: 00cec000 Unfrozen
      Start: msvcr120!_threadstartex (6330bfb4)
      Priority: 0  Priority class: 32  Affinity: ff

以下命令顯示最初導致異常的線程(或在調試器附加到進程時處於活動狀態)。

0:000> ~#
# 67  Id: 2854.1958 Suspend: 0 Teb: 00cec000 Unfrozen
      Start: msvcr120!_threadstartex (6330bfb4)
      Priority: 0  Priority class: 32  Affinity: ff

以下命令顯示2號線程

0:000> ~2
   2  Id: 2854.1fd4 Suspend: 1 Teb: 00c02000 Unfrozen
      Start: ntdll!TppWorkerThread (77711440)
      Priority: 0  Priority class: 32  Affinity: ff
0:001> ~
   0 id: 4dc.470 Suspend: 0 Teb 7ffde000 Unfrozen
. 1 id: 4dc.534 Suspend: 0 Teb 7ffdd000 Unfrozen
#  2 id: 4dc.5a8 Suspend: 0 Teb 7ffdc000 Unfrozen

在這個輸出的第一行,0是十進制線程數,4dc是十六進制進程ID,470是十六進制線程ID,0x7ffde000是teb的地址,unfrozen是線程狀態。線程1之前的句點(.)表示此線程是當前線程。線程2之前的數字符號(#)表示此線程是最初導致異常的線程,或者在調試器連接到進程時處於活動狀態。

~e (Thread-Specific Command)

~e命令對特定線程或目標進程中的所有線程執行一個或多個命令。不要將此命令與e(輸入值)命令混淆。

~Thread e CommandString

參數:

  • Thread
    指定調試器將為其執行commandString的線程。
  • CommandString
    指定要執行的一個或多個命令。您應該使用分號分隔多個命令。commandString包括輸入行的其余部分。字母“e”后面的所有文本都被解釋為該字符串的一部分。不要將commandstring括在引號中。

環境:

模式

僅限用戶模式

目標

實時、 崩潰轉儲

平台

全部

只能在用戶模式下指定線程。在內核模式中,波浪號(~)表示處理器。當您將~e命令與一個線程一起使用時,~e命令只會保存一些鍵入內容。例如,以下兩個命令是等效的。

0:000> ~2e r; k; kd 

0:000> ~2r; ~2k; ~2kd 

 但是,可以使用~e限定符多次重復命令或擴展命令。當您以這種方式使用限定符時,它可以消除額外的輸入。例如,以下命令重復!gle為正在調試的每個線程使用gle擴展命令。

0:000> ~*e !gle 

如果執行一個命令時出錯,則繼續執行下一個命令。不能將~e限定符與執行命令(g、gh、gn、gn、gu、p、pa、pc、t、ta、tb、tc、wt)一起使用。不能將~e限定符與j(如果不是則執行)或z(執行時執行)條件命令一起使用。如果要調試多個進程,則不能使用~e命令訪問非活動進程的虛擬內存空間。

 ~f (Freeze Thread)

~f命令凍結給定線程,使其停止並等待解凍。 不要將此命令與f(填充內存)命令混淆。

~Thread f 

參數:

  • Thread
    指定要凍結的線程。

環境:

模式

僅限用戶模式

目標

實時、 崩潰轉儲

平台

全部

只能在用戶模式下指定線程。在內核模式中,波浪號(~)表示處理器。~f命令導致指定線程凍結。當調試器使目標應用程序能夠繼續執行時,其他線程將按預期執行,而此線程將保持停止狀態。
下面的示例向您展示如何使用此命令。以下命令顯示所有線程的當前狀態。

0:000> ~* k

以下命令凍結導致當前異常的線程。

0:000> ~# f

以下命令檢查此線程的狀態是否已掛起。

 0:000> ~* k

 ~u (Unfreeze Thread)

 ~u命令取消凍結指定線程。

~n (Suspend Thread)

~n命令暫停執行指定線程。每次使用~n命令時,線程的掛起計數都會增加1。使用此命令時,將顯示線程的起始地址。

~m (Resume Thread)

~m命令繼續執行指定線程。每次使用~m命令時,線程的掛起計數都會減少一個。

~s (Set Current Thread)

~s命令設置或顯示當前線程號。在用戶模式下,~s設置當前線程。不要將此命令與~s (Change Current Processor)命令(僅在內核模式下工作)、|s (Set Current Process)命令、||s (Set Current System)命令或s (Search Memory)命令混淆。

~Thread s 
~ s 

參數:

  • Thread
    指定要設置或顯示的線程。
只能在用戶模式下指定線程。在內核模式中,波浪號(~)表示處理器。 如果使用~s語法,調試器將顯示有關當前線程的信息。 此命令還反匯編當前系統、進程和線程的當前指令。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

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



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