~ (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语法,调试器将显示有关当前线程的信息。 此命令还反汇编当前系统、进程和线程的当前指令。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

WinDbg常用命令系列---线程相关操作~*的更多相关文章

  1. WinDbg常用命令系列---异常相关操作

    .exr (Display Exception Record) .exr命令显示异常记录的内容. .exr Address .exr -1 参数: Address指定异常记录的地址.如果指定-1作为地 ...

  2. WinDbg常用命令系列---线程栈中局部上下文切换.frame

    .frame (Set Local Context) .frame命令指定使用哪个本地上下文(作用域)解释本地变量或显示当前本地上下文. .frame [/c] [/r] [FrameNumber] ...

  3. WinDbg常用命令系列---符号相关命令

    ld (Load Symbols) ld命令加载指定模块的符号并更新所有模块信息. ld ModuleName [/f FileName] 参数: ModuleName指定要加载其符号的模块的名称.m ...

  4. WinDbg常用命令系列---!findstack

    简介 !findstack扩展查找所有包含指定的符号或模块的堆栈.此命令搜索线程调用堆栈中的特定符号,并显示匹配的线程. 使用形式 !findstack Symbol[DisplayLevel] !f ...

  5. WinDbg常用命令系列---源代码操作相关命令

    lsf, lsf- (Load or Unload Source File) lsf和lsf-命令加载或卸载源文件. lsf Filename lsf- Filename 参数: Filename指定 ...

  6. WinDbg常用命令系列---日志操作相关命令log*

    .logopen (Open Log File) .logopen命令将事件和命令的副本从调试器命令窗口发送到新的日志文件. .logopen [Options] [FileName] .logope ...

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

    ba (Break on Access) ba命令设置处理器断点(通常称为数据断点,不太准确).此断点在访问指定内存时触发. 用户模式下 [~Thread] ba[ID] Access Size [O ...

  8. WinDbg常用命令系列---查看线程调用栈命令K*简介

    Windbg里的K*命令显示给定线程的堆栈帧以及相关信息,对于我们调试时,进行调用栈回溯有很大的帮助. 一.K*命令使用方式 在不同平台上,K*命令的使用组合如下 User-Mode, x86 Pro ...

  9. WinDbg常用命令系列---单步执行p*

    p (Step) p命令执行单个指令或源代码行,并可选地显示所有寄存器和标志的结果值.当子例程调用或中断发生时,它们被视为单个步骤. 用户模式: [~Thread] p[r] [= StartAddr ...

随机推荐

  1. python之数据解构和算法进阶

    1.解压赋值多个变量 采用解构的方法.可迭代对象才可以,变量数量与元素个数要一一对应,或者采用*万能接收. 2.解压可迭代对象赋值多个变量 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 Va ...

  2. 一文读懂 IPv4 到 IPv6 的过渡技术

    在介绍 IPv4 到 IPv6 过渡技术之前,我们先来简单了解一下 IPv4 和 IPv6.什么是 IPv4?IPv4 全称为 Internet Protocol version 4,它为互联网上的每 ...

  3. centos 7 搭建 k8s

    环境 Centos 7.2 master 192.168.121.101node-1 192.168.121.134node-2 192.168.121.135 Kubernetes集群组件:– et ...

  4. git 学习笔记 --- Rebase

    在上一节我们看到了,多人在同一个分支上协作时,很容易出现冲突.即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功. 每次合并再push后,分支变成了这样: $ git l ...

  5. git 学习笔记--Feature分支

    软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...

  6. 创建包含CRUD操作的Web API接口5:实现Delete方法

    本节是前面四节的延续,在前面几节中我们创建了Web API并添加了必要的基础设施,实现了Get.Post.和Put方法.本节中,我们将介绍如何在Web API中实现Delete方法. 在RESTful ...

  7. HUAWEI,H3C 三层交换机 常用命令

    <HUAWEI> display ip interface brief,命令全局模式下可以查看所有端口下的ip地址及物理状态display this interface,命令用来显示当前接 ...

  8. java之spring之helloword

    这篇文章主要讲 spring的基础的使用案例 项目整体目录结构: 1.新建一个java项目:spring_helloworld 2.在项目下创建一个lib文件夹,并把一些必须的jar包复制过去 新建l ...

  9. mysql-表关系介绍(应用较多)

    目录 表之间的关系(重点) foreign key (外键) 级联操作 (cascade) 两种级联操作 外键的使用 多对一(一对多) 多对多 一对一关系 表之间的关系(重点) foreign key ...

  10. ASUS笔记本,更换了固态硬盘,重装系统前后开机都自动进入BIOS界面

    解决方法:advanced标签中sata configration回车进入,如有识别硬盘设备,按F9恢复BIOS默认设置,按F10保存后重启. 如有自行安装过系统,Security-Secure Bo ...