!thread

!thread 扩展显示有关目标系统(包括 ETHREAD 块)上的线程的摘要信息。 此命令只能在内核模式调试期间使用。

此扩展命令与 .thread 命令不同, (设置注册上下文) 命令。

语法

!thread [-p] [-t] [Address [Flags]]

参数

-p
显示有关拥有线程的进程的摘要信息。

-t
如果包含此选项, 则 Address 是线程 ID,而不是线程地址。

地址
指定目标计算机上线程的十六进制地址。 如果 Address 为 -1 或省略,则指示当前线程。

标志
指定要显示的详细信息级别。 标志 可以是以下位的任意组合。 如果 Flags 为 0,则只显示少量的信息。 默认值为0x6:

位 1 (0x2)
显示线程的等待状态。

位 2 (0x4)
如果此位在没有 Bit 1 位 (0x2) ,则不起作用。 如果此位与位 1 一同使用,则线程将显示为堆栈跟踪。

位 3 (0x8)
将返回地址、堆栈指针和 (在 Itanium 系统上) bsp 寄存器值添加到每个函数显示的信息中,并禁止显示函数参数。

位 4 (0x10)
在此命令的持续时间内,将进程上下文设置为拥有指定线程的进程。 这可更精确地显示线程堆栈。

DLL

Kdexts.dll

其他信息

有关内核模式下的线程的信息,请参阅更改上下文和控制进程和线程。 有关分析进程和线程的信息,请参阅 Microsoft Windows Internals,主讲人:Mark Russin且 Alex Ionescu 和 David则。

备注

下面是使用 Windows 10:

0: kd> !thread 0xffffcb088f0a4480            
THREAD ffffcb088f0a4480  Cid 0e34.3814  Teb: 0000001a27ca6000 Win32Thread: 0000000000000000 RUNNING on processor 0
Not impersonating
DeviceMap                 ffffb80842016c20
Owning Process            ffffcb08905397c0       Image:         MsMpEng.exe
Attached Process          N/A            Image:         N/A
Wait Start TickCount      182835891      Ticks: 0
Context Switch Count      5989           IdealProcessor: 3             
UserTime                  00:00:01.046
KernelTime                00:00:00.296
Win32 Start Address 0x00007ffb3b2fd1b0
Stack Init ffff95818476add0 Current ffff958184769d30
Base ffff95818476b000 Limit ffff958184765000 Call 0000000000000000
Priority 8 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5
Child-SP          RetAddr           : Args to Child                                                           : Call Site
fffff802`59858c68 fffff801`b56d24aa : ffffcb08`8fd68010 00000000`00000000 fffff802`58259600 00000000`00000008 : nt!DbgBreakPointWithStatus [d:\rs2\minkernel\ntos\rtl\amd64\debugstb.asm @ 130] 
fffff802`59858c70 ffffcb08`8fd68010 : 00000000`00000000 fffff802`58259600 00000000`00000008 ffffcb08`8f0a4400 : 0xfffff801`b56d24aa
fffff802`59858c78 00000000`00000000 : fffff802`58259600 00000000`00000008 ffffcb08`8f0a4400 00000000`00000019 : 0xffffcb08`8fd68010

使用 !process 等命令查找感兴趣的线程的地址或线程 ID。

下表解释了 !thread 显示中的有用信息。

参数 含义

线程地址

单词 THREAD 后的十六进制数字是 ETHREAD 块的地址。 在上一示例中,线程地址0xffffcb088f0a4480。

线程 ID

" Cid "一词后的两个十六进制数字是进程 ID 和线程 ID: 进程 ID.thread ID。 在上一示例中,进程 ID 为 0x0e34,线程 ID 为 0x3814。

线程环境块 (TEB)

单词 Teb 后的十六进制数字是 TEB 中线程 (的地址) 。

系统服务调度表

单词 Win32Thread 后的十六进制数字是系统服务调度表的地址。

线程状态

线程状态显示在以单词 RUNNING 开头的行 的末尾

拥有过程

单词"拥有进程"后的十六 进制数字是 拥有此线程的进程的 EPROCESS 地址。

起始地址

单词"开始地址"后的十六进制 数字是线程 起始地址。 这可能以符号形式显示。

用户线程函数

单词" Win32 起始地址"后的十六进制数字是用户线程函数的地址。

Priority

线程的优先级信息遵循"优先级" 一词

堆栈跟踪

线程的堆栈跟踪将在此显示结束时显示。