zoukankan      html  css  js  c++  java
  • 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语法,调试器将显示有关当前线程的信息。 此命令还反汇编当前系统、进程和线程的当前指令。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    使用CSS3制图
    hdu4585 & BestCoder Round #1 项目管理(vector应用)
    ZooKeeperEclipse 小工具
    svn代码统计工具的金额
    【教你zencart仿站 文章1至6教训 高清1280x900视频下载】[支持手机端]
    [Django]models定义choices 字典中的页面显示值
    xml publisher根据条件显示或隐藏列
    hdu 1398 Square Coins(生成函数,完全背包)
    ubuntu软件中心崩溃
    PHP socket类
  • 原文地址:https://www.cnblogs.com/yilang/p/11445709.html
Copyright © 2011-2022 走看看