Freigeben über


!Stack

Die Erweiterung !stacks zeigt Informationen über die Kernel-Stacks an.

Syntax

!stacks [Detail [FilterString]] 

Parameter

Detail
Gibt den Detaillierungsgrad an, der für die Anzeige verwendet werden soll. In der folgenden Tabelle sind die gültigen Werte für Detail aufgeführt.

0

Zeigt eine Zusammenfassung der aktuellen Kernel-Stacks an. Dies ist der Standardwert.

1

Zeigt die Stack an, die derzeit ausgelagert sind, sowie die aktuellen Kernel-Stack.

2

Zeigt die vollständigen Parameter für alle Stack sowie die Stack, die derzeit ausgelagert sind, und die aktuellen Kernel-Stack an.

FilterString
Zeigt nur Threads an, die die angegebene Teilzeichenkette in einem Symbol enthalten.

DLL

Kdexts.dll

Zusätzliche Informationen

Informationen über Kernel-Stacks finden Sie unter Microsoft Windows Internals von Mark Russinovich und David Solomon.

Hinweise

Die Erweiterung !stacks gibt einen kurzen Überblick über den Status jedes Threads. Sie können diese Erweiterung anstelle der Erweiterung !process verwenden, um einen schnellen Überblick über das System zu erhalten, insbesondere beim Debuggen von Multithread-Problemen wie Ressourcenkonflikten oder Deadlocks.

Die Benutzermoduserweiterung !findstack zeigt auch Informationen über bestimmte Stack an.

Hier ist ein Beispiel für die einfachste Anzeige !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
.....

Die erste Spalte zeigt die Prozess-ID und die Thread-ID (getrennt durch einen Punkt).

Die zweite Spalte ist die aktuelle Adresse des ETHREAD-Blocks des Threads.

Die dritte Spalte zeigt den Status des Threads (initialisiert, bereit, in Betrieb, im Standby, beendet, Übergang oder blockiert).

Die vierte Spalte zeigt die oberste Adresse auf dem Stack des Threads.

Hier sind Beispiele für detailliertere !stacks-Ausgaben:

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
.....