!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.
Flaggen
Gibt die Detailstufe an, die angezeigt werden soll. 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. |