!cs
L’extension !cs affiche une ou plusieurs sections critiques ou toute l’arborescence de sections critiques.
!cs [-s] [-l] [-o]
!cs [-s] [-o] Address
!cs [-s] [-l] [-o] StartAddress EndAddress
!cs [-s] [-o] -d InfoAddress
!cs [-s] -t [TreeAddress]
!cs -?
Paramètres
Paramètre | Description |
---|---|
-s | Affiche la trace de la pile d’initialisation de chaque section critique, si ces informations sont disponibles. |
-l | Affiche uniquement les sections critiques verrouillées. |
-o | Affiche la pile du propriétaire pour toute section critique verrouillée affichée. |
Adresse | Spécifie l’adresse de la section critique à afficher. Si vous omettez ce paramètre, le débogueur affiche toutes les sections critiques du processus actuel. |
StartAddress | Spécifie le début de la plage d’adresses pour rechercher des sections critiques. |
EndAddress | Spécifie la fin de la plage d’adresses pour rechercher des sections critiques. |
-d | Affiche les sections critiques associées à DebugInfo. |
InfoAddress | Spécifie l'adresse de DebugInfo. |
-t | Affiche une arborescence de sections critiques. Avant de pouvoir utiliser l’option -t, vous devez activer Application Verifier pour le processus cible et sélectionner l’option Vérifier l’utilisation du verrouillage. |
TreeAddress | Spécifie l’adresse de la racine de l’arborescence de sections critiques. Si vous omettez ce paramètre ou spécifiez zéro, le débogueur affichera l’arborescence de sections critique pour le processus actuel. |
-? | Affiche un texte d’aide pour cette extension dans la fenêtre de commande de débogueur. |
DLL
Exts.dll
Informations supplémentaires
Pour obtenir d’autres commandes et extensions qui peuvent afficher des informations de section critique, consultez Displaying a Critical Section (Affichage d’une section critique). Pour plus d’informations sur les sections critiques, consultez la documentation du Kit de développement logiciel (SDK) Microsoft Windows, la documentation du Kit de pilotes Windows (WDK) et Microsoft Windows Internals par Mark Russinovich et David Salomon.
Notes
L’extension !cs nécessite des symboles complets (y compris les informations de type) pour le processus en cours de débogage et pour Ntdll.dll.
Les exemples suivants vous montrent comment utiliser !cs. La commande suivante affiche des informations sur la section critique à l’adresse 0x7803B0F8 et affiche sa trace de pile d’initialisation.
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
La commande suivante affiche des informations sur la section critique dont DebugInfo est à l’adresse 0x6A262080.
0:001> !cs -d 0x6A262080
DebugInfo = 0x6A262080
Critical section = 0x7803B0F8 (MSVCRT!__app_type+0x4)
NOT LOCKED
LockSemaphore = 0x0
SpinCount = 0x0
La commande suivante affiche des informations sur toutes les sections critiques actives du processus actuel.
## 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
...
La commande suivante affiche l’arborescence des sections critiques.
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
Les éléments suivants apparaissent dans cet écran !cs -t :
InitThr est l’ID de thread du thread qui a initialisé le CS.
EnterThr est l’ID du thread qui a appelé EnterCriticalSection la dernière fois.
WaitThr est l’ID du thread qui a trouvé la section critique détenue par un autre thread et qui l’a attendu la dernière fois.
TryEnThr est l’ID du thread qui a appelé TryEnterCriticalSection la dernière fois.
LeaveThr est l’ID du thread qui a appelé LeaveCriticalSection la dernière fois.
EnterCnt est le nombre de EnterCriticalSection.
WaitCnt est le nombre de conflits.
Voir aussi
Affichage d’une section critique
Délais d’expiration de section critique (mode utilisateur)