Freigeben über


!cs

Die Erweiterung !cs zeigt einen oder mehrere kritische Abschnitte oder den gesamten Baum der kritischen Abschnitte an.

!cs [-s] [-l] [-o] 
!cs [-s] [-o] Address 
!cs [-s] [-l] [-o] StartAddress EndAddress 
!cs [-s] [-o] -d InfoAddress 
!cs [-s] -t [TreeAddress] 
!cs -? 

Parameter

Parameter Beschreibung
-s Zeigt den Initialisierungs-Stack-Trace jedes kritischen Abschnitts an, sofern diese Information verfügbar ist.
-l Zeigen Sie nur die gesperrten kritischen Abschnitte an.
-o Zeigt den Stapel des Eigentümers für jeden gesperrten kritischen Abschnitt an, der gerade angezeigt wird.
Address Gibt die Adresse des kritischen Abschnitts an, der angezeigt werden soll. Wenn Sie diesen Parameter weglassen, zeigt der Debugger alle kritischen Abschnitte des aktuellen Prozesses an.
StartAdresse Gibt den Beginn des Adressbereichs an, in dem nach kritischen Abschnitten gesucht werden soll.
EndAdresse Gibt das Ende des Adressbereichs an, in dem nach kritischen Abschnitten gesucht werden soll.
-d Zeigt kritische Abschnitte an, die mit DebugInfo verbunden sind.
InfoAdresse Gibt die Adresse der DebugInfo an.
-t Zeigt einen Baum der kritischen Abschnitte an. Bevor Sie die Option -t verwenden können, müssen Sie Application Verifier für den Zielprozess aktivieren und die Option Check lock usage auswählen.
TreeAddress Gibt die Adresse der Wurzel des Baums des kritischen Abschnitts an. Wenn Sie diesen Parameter weglassen oder Null angeben, zeigt der Debugger den Baum der kritischen Abschnitte für den aktuellen Prozess an.
-? Zeigt einen Hilfetext für diese Erweiterung im Befehlsfenster des Debugger an.

DLL

Exts.dll

Zusätzliche Informationen

Weitere Befehle und Erweiterungen, die Informationen über kritische Abschnitte anzeigen können, finden Sie unter Anzeige eines kritischen Abschnitts. Weitere Informationen zu kritischen Abschnitten finden Sie in der Microsoft Windows SDK-Dokumentation, der Windows Driver Kit (WDK)-Dokumentation und Microsoft Windows Internals von Mark Russinovich und David Solomon.

Hinweise

Die Erweiterung !cs erfordert vollständige Symbole (einschließlich Typinformationen) für den zu debuggenden Prozess und für Ntdll.dll.

Die folgenden Beispiele zeigen Ihnen, wie Sie !cs verwenden können. Der folgende Befehl zeigt Informationen über den kritischen Abschnitt an Adresse 0x7803B0F8 und seine Initialisierungsstapelspur an.

0:001> !cs -s 0x7803B0F8
Critical section   = 0x7803B0F8 (MSVCRT!__app_type+0x4)
DebugInfo          = 0x6A262080
NOT LOCKED
LockSemaphore      = 0x0
SpinCount          = 0x0

Stack trace for DebugInfo = 0x6A262080:

0x6A2137BD: ntdll!RtlInitializeCriticalSectionAndSpinCount+0x9B
0x6A207A4C: ntdll!LdrpCallInitRoutine+0x14
0x6A205569: ntdll!LdrpRunInitializeRoutines+0x1D9
0x6A20DCE1: ntdll!LdrpInitializeProcess+0xAE5

Der folgende Befehl zeigt Informationen über den kritischen Abschnitt an, dessen DebugInfo an Adresse 0x6A262080 liegt.

0:001> !cs -d 0x6A262080
DebugInfo          = 0x6A262080
Critical section   = 0x7803B0F8 (MSVCRT!__app_type+0x4)
NOT LOCKED
LockSemaphore      = 0x0
SpinCount          = 0x0

Der folgende Befehl zeigt Informationen über alle aktiven kritischen Abschnitte des aktuellen Prozesses an.

## 0:001> !cs

DebugInfo          = 0x6A261D60
Critical section   = 0x6A262820 (ntdll!RtlCriticalSectionLock+0x0)
LOCKED
LockCount          = 0x0
OwningThread       = 0x460
RecursionCount     = 0x1
LockSemaphore      = 0x0
## SpinCount          = 0x0

DebugInfo          = 0x6A261D80
Critical section   = 0x6A262580 (ntdll!DeferedCriticalSection+0x0)
NOT LOCKED
LockSemaphore      = 0x7FC
## SpinCount          = 0x0

DebugInfo          = 0x6A262600
Critical section   = 0x6A26074C (ntdll!LoaderLock+0x0)
NOT LOCKED
LockSemaphore      = 0x0
## SpinCount          = 0x0

DebugInfo          = 0x77fbde20
Critical section   = 0x77c8ba60 (GDI32!semColorSpaceCache+0x0)
LOCKED
LockCount          = 0x0
OwningThread       = 0x00000dd8
RecursionCount     = 0x1
LockSemaphore      = 0x0
## SpinCount          = 0x00000000

...

Mit dem folgenden Befehl wird der Baum des kritischen Abschnitts angezeigt.

0:001> !cs -t

Tree root 00bb08c0

Level     Node       CS    Debug  InitThr EnterThr  WaitThr TryEnThr LeaveThr EnterCnt  WaitCnt
## 


    0 00bb08c0 77c7e020 77fbcae0      4c8      4c8        0        0      4c8        c        0
 1 00dd6fd0 0148cfe8 01683fe0      4c8      4c8        0        0      4c8        2        0
 2 00bb0aa0 008e8b84 77fbcc20      4c8        0        0        0        0        0        0
    3 00bb09e0 008e8704 77fbcba0      4c8        0        0        0        0        0        0
    4 00bb0a40 008e8944 77fbcbe0      4c8        0        0        0        0        0        0
    5 00bb0a10 008e8824 77fbcbc0      4c8        0        0        0        0        0        0
    5 00bb0a70 008e8a64 77fbcc00      4c8        0        0        0        0        0        0
    3 00bb0b00 008e8dc4 77fbcc60      4c8        0        0        0        0        0        0
    4 00bb0ad0 008e8ca4 77fbcc40      4c8        0        0        0        0        0        0
    4 00bb0b30 008e8ee4 77fbcc80      4c8        0        0        0        0        0        0
    5 00dd4fd0 0148afe4 0167ffe0      4c8        0        0        0        0        0        0
    2 00bb0e90 77c2da98 00908fe0      4c8      4c8        0        0      4c8       3a        0
 3 00bb0d70 77c2da08 008fcfe0      4c8        0        0        0        0        0        0

Die folgenden Elemente erscheinen in dieser Anzeige !cs -t:

  • InitThr ist die Thread-ID für den Thread, der den CS initialisiert hat.

  • EnterThr ist die ID des Threads, der EnterCriticalSection zuletzt aufgerufen hat.

  • WaitThr ist die ID des Threads, der den kritischen Abschnitt gefunden hat, den ein anderer Thread besaß, und das letzte Mal darauf gewartet hat.

  • TryEnThr ist die ID des Threads, der TryEnterCriticalSection zuletzt aufgerufen hat.

  • LeaveThr ist die ID des Threads, der LeaveCriticalSection zuletzt aufgerufen hat

  • EnterCnt ist die Anzahl von EnterCriticalSection.

  • WaitCnt ist der Contention Count.

Weitere Informationen

!ntsdexts.locks

Anzeige eines kritischen Abschnitts

Zeitüberschreitungen in kritischen Abschnitten (Benutzermodus)