!thread

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

此扩展命令与 .thread(设置寄存器上下文)命令不同。

语法

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

参数

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

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

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

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

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

位 2 (0x4)
如果使用此位而不使用位 1 (0x2),则它不起作用。 如果将此位与位 1 结合使用,则会显示线程和堆栈跟踪。

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

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

DLL

Kdexts.dll

其他信息

有关内核模式下的线程的信息,请参阅更改上下文以及控制进程和线程。 有关分析进程和线程的详细信息,请参阅 Microsoft Windows 内部资料(作者:Mark Russinovich、Alex Ionescu 和 David Solomon)。

注解

下面是使用 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:process ID.thread ID。 在前面的示例中,进程 ID 为 0x0e34,线程 ID 为 0x3814。

线程环境块 (TEB)

字词 Teb 后面的十六进制数是线程环境块 (TEB) 的地址。

Win32Thread

字词 Win32Thread 后面的十六进制数是 Win32Thread 的地址。

线程状态

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

拥有进程

字词 Owning Process 后面的十六进制数是拥有此线程的进程 EPROCESS 的地址。

起始地址

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

用户线程函数

字词 Win32 Start Address 后面的十六进制数是用户线程函数的地址。

优先级

线程的优先级信息在字词 Priority 后面。

堆栈跟踪

线程的堆栈跟踪显示在此显示末尾。