!thread

Die Erweiterung !thread zeigt zusammenfassende Informationen über einen Thread auf dem Zielsystem an, einschließlich des ETHREAD-Blocks. Dieser Befehl kann nur während der Fehlersuche im Kernel-Modus verwendet werden.

Dieser Erweiterungsbefehl ist nicht dasselbe wie der Befehl .thread (Set Register Context).

Syntax

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

Parameter

-p
Zeigt eine Zusammenfassung der Informationen über den Prozess an, dem der Thread gehört.

-t
Wenn diese Option aktiviert ist, ist Address die Thread-ID und nicht die Thread-Adresse.

Adresse
Gibt die hexadezimale Adresse des Threads auf dem Zielcomputer an. Wenn Address -1 ist oder ausgelassen wird, zeigt es den aktuellen Thread an.

Flags
Gibt die anzuzeigende Detailstufe an. Flags können eine beliebige Kombination der folgenden Bits sein. Wenn Flags den Wert 0 hat, wird nur eine minimale Menge an Informationen angezeigt. Der Standardwert ist 0x6:

Bit 1 (0x2)
Zeigt die Wartezustände des Threads an.

Bit 2 (0x4)
Wenn dieses Bit ohne Bit 1 (0x2) verwendet wird, hat es keine Wirkung. Wenn dieses Bit zusammen mit Bit 1 verwendet wird, wird der Thread mit einem Stack-Trace angezeigt.

Bit 3 (0x8)
Fügt die Rücksprungadresse, den Stapelzeiger und (auf Itanium-Systemen) den Registerwert bsp zu den für jede Funktion angezeigten Informationen hinzu und unterdrückt die Anzeige der Funktionsargumente.

Bit 4 (0x10)
Setzt den Prozesskontext für die Dauer dieses Befehls auf den Prozess, dem der angegebene Thread gehört. Dies führt zu einer genaueren Anzeige von Gewindestapeln.

DLL

Kdexts.dll

Zusätzliche Informationen

Informationen über Threads im Kernelmodus finden Sie unter Ändern von Kontexten und Steuern von Prozessen und Threads. Weitere Informationen zur Analyse von Prozessen und Threads finden Sie unter Microsoft Windows Internals von Mark Russinovich, Alex Ionescu und David Solomon.

Hinweise

Hier ist ein Beispiel mit 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

Verwenden Sie Befehle wie !process, um die Adresse oder die Thread-ID des Threads zu finden, an dem Sie interessiert sind.

Die nützlichen Informationen in der Anzeige !thread werden in der folgenden Tabelle erläutert.

Parameter Bedeutung

Adresse des Gewindes

Die hexadezimale Zahl hinter dem Wort THREAD ist die Adresse des ETHREAD-Blocks. Im vorangegangenen Beispiel lautet die Thread-Adresse 0xffffcb088f0a4480 .

Thread-ID

Die beiden hexadezimalen Zahlen nach dem Wort Cid sind die Prozess-ID und die Thread-ID: process ID.thread ID. Im vorangegangenen Beispiel lautet die Prozess-ID 0x0e34 und die Thread-ID 0x3814.

Thread Environment Block (TEB)

Die hexadezimale Zahl nach dem Wort Teb ist die Adresse des Thread Environment Block (TEB).

Win32Thread

Die hexadezimale Zahl nach dem Wort Win32Thread ist die Adresse des Win32Thread.

Threadzustand

Der Threadstatus wird am Ende der Zeile angezeigt, die mit dem Wort RUNNING beginnt.

Owning Process

Die hexadezimale Zahl nach den Worten Owning Process ist die Adresse des EPROCESS für den Prozess, dem dieser Thread gehört.

Startadresse

Die hexadezimale Zahl nach den Worten Start Address ist die Thread-Startadresse. Dies könnte in symbolischer Form geschehen.

Benutzer-Thread-Funktion

Die hexadezimale Zahl nach den Worten Win32 Start Address ist die Adresse der User-Thread-Funktion.

Priorität

Die Prioritätsinformationen für den Thread folgen auf das Wort Priority.

Stapelüberwachung

Am Ende dieser Anzeige erscheint ein Stack-Trace für den Thread.