Debugging Tools for Windows

!stacks

!stacks扩展显示内核调用堆栈的信息。

语法

Windows 2000的语法:

!stacks [Detail

Windows XP和之后的语法:

!stacks [Detail [FilterString]] 

参数

Detail
指定要显示的详细级别。下表是Detail的合法值。
0 显示当前内核调用堆栈的摘要。这是默认值。
1 显示当前页换出的堆栈,以及当前内核栈。
2 显示所有调用堆栈的完整参数,以及当前页换出的堆栈和当前内核堆栈。

FilterString
(Windows X和之后) 只显示符号包含指定的字符串的线程。 

DLL

Windows 2000 Kdextx86.dll
Windows XP和之后 Kdexts.dll

注释

!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块的当前地址。

第三列是线程的状态(initialized, ready, running, standby, terminated, transition, 或blocked)。

第四列显示的是线程调用堆栈顶部的地址。

下面是更详细一些的!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
.....

附加信息

关于内核栈的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals

Build machine: CAPEBUILD