!stacks
!stacks 扩展显示有关内核堆栈的信息。
语法
!stacks [Detail [FilterString]]
参数
细节
指定要在显示中使用的详细信息级别。 下表列出了 Detail 的有效值。
0 |
显示当前内核堆栈的摘要。 这是默认值。 |
1 |
显示当前分页的堆栈以及当前内核堆栈。 |
2 |
显示所有堆栈的所有参数,以及当前分页的堆栈和当前内核堆栈。 |
FilterString
仅显示包含符号中指定子字符串的线程。
DLL
Kdexts.dll
其他信息
有关内核堆栈对象的信息,请参阅 Mark Russinovich 和 David Solomon 编写的 Microsoft Windows 内部资料。
注解
!stacks 扩展简要概述了每个线程的状态。 可以使用此扩展来代替 !process 扩展,以快速了解系统,尤其是在调试多线程问题(如资源冲突或死锁)时。
!findstack 用户模式扩展还显示有关特定堆栈的信息。
下面是最简单的 !stacks 显示示例:
kd> !stacks 0
Proc.Thread .Thread ThreadState Blocker
[System]
4.000050 827eea10 Blocked +0xfe0343a5
[smss.exe]
[csrss.exe]
b0.0000a8 82723b70 Blocked ntoskrnl!_KiSystemService+0xc4
b0.0000c8 82719620 Blocked ntoskrnl!_KiSystemService+0xc4
b0.0000d0 827d5d50 Blocked ntoskrnl!_KiSystemService+0xc4
.....
第一列显示进程 ID 和线程 ID(用句点分隔)。
第二列是线程的 ETHREAD 块的当前地址。
第三列显示线程的状态(已初始化、就绪、正在运行、备用、已终止、转换或被阻止)。
第四列显示线程堆栈上的顶部地址。
下面是较为详细的 !stacks 输出示例:
kd> !stacks 1
Proc.Thread .Thread ThreadState Blocker
[System]
4.000008 827d0030 Blocked ntoskrnl!MmZeroPageThread+0x66
4.000010 827d0430 Blocked ntoskrnl!ExpWorkerThread+0x189
4.000014 827cf030 Blocked Stack paged out
4.000018 827cfda0 Blocked Stack paged out
4.00001c 827cfb10 Blocked ntoskrnl!ExpWorkerThread+0x189
.....
[smss.exe]
9c.000098 82738310 Blocked Stack paged out
9c.0000a0 826a5190 Blocked Stack paged out
9c.0000a4 82739d30 Blocked Stack paged out
[csrss.exe]
b0.0000bc 826d0030 Blocked Stack paged out
b0.0000b4 826c9030 Blocked Stack paged out
b0.0000a8 82723b70 Blocked ntoskrnl!_KiSystemService+0xc4
.....
kd> !stacks 2
Proc.Thread .Thread ThreadState Blocker
[System]
4.000008 827d0030 Blocked ntoskrnl!KiSwapThread+0xc5
ntoskrnl!KeWaitForMultipleObjects+0x2b4
ntoskrnl!MmZeroPageThread+0x66
ntoskrnl!Phase1Initialization+0xd82
ntoskrnl!PspSystemThreadStartup+0x4d
ntoskrnl!CreateSystemRootLink+0x3d8
+0x3f3f3f3f
4.000010 827d0430 Blocked ntoskrnl!KiSwapThread+0xc5
ntoskrnl!KeRemoveQueue+0x191
.....