!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 后面。 |
堆栈跟踪 |
线程的堆栈跟踪显示在此显示末尾。 |