!cs
La extensión !cs muestra una o varias secciones críticas o todo el árbol de secciones críticas.
!cs [-s] [-l] [-o]
!cs [-s] [-o] Address
!cs [-s] [-l] [-o] StartAddress EndAddress
!cs [-s] [-o] -d InfoAddress
!cs [-s] -t [TreeAddress]
!cs -?
Parámetros
Parámetro | Descripción |
---|---|
-s | Muestra el seguimiento de pila de inicialización de cada sección crítica, si esta información está disponible. |
-l | Muestra solo las secciones críticas bloqueadas. |
-o | Muestra la pila del propietario para cualquier sección crítica bloqueada que se muestre. |
Dirección | Especifica la dirección de la sección crítica que se va a mostrar. Si omite este parámetro, el depurador muestra todas las secciones críticas del proceso actual. |
StartAddress | Especifica el principio del intervalo de direcciones para buscar secciones críticas. |
EndAddress | Especifica el final del intervalo de direcciones para buscar secciones críticas. |
-d | Muestra secciones críticas asociadas a DebugInfo. |
InfoAddress | Especifica la dirección de DebugInfo. |
-t | Muestra un árbol de secciones críticas. Para poder usar la opción -t, debe activar el Comprobador de aplicaciones para el proceso de destino y seleccionar la opción Comprobar uso de bloqueo. |
TreeAddress | Especifica la dirección de la raíz del árbol de secciones críticas. Si omite este parámetro o especifica cero, el depurador muestra el árbol de secciones críticas para el proceso actual. |
-? | Muestra un texto de ayuda para esta extensión en la ventana Comando del depurador. |
Archivo DLL
Exts.dll
Información adicional
Para ver otros comandos y extensiones que pueden mostrar información de sección crítica, consulte Mostrar una sección crítica. Para obtener más información sobre las secciones críticas, consulte la documentación del SDK de Microsoft Windows, del Kit para controladores de Microsoft Windows y de Microsoft Windows Internals, de Mark Russinovich y David Solomon.
Comentarios
La extensión !cs requiere símbolos completos (incluida la información de tipo) para el proceso que se está depurando y para Ntdll.dll.
En los siguientes ejemplos se muestra cómo usar !cs. El comando siguiente muestra información sobre la sección crítica en la dirección 0x7803B0F8 y muestra su seguimiento de pila de inicialización.
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
El siguiente comando muestra información sobre la sección crítica cuyo DebugInfo está en la dirección 0x6A262080.
0:001> !cs -d 0x6A262080
DebugInfo = 0x6A262080
Critical section = 0x7803B0F8 (MSVCRT!__app_type+0x4)
NOT LOCKED
LockSemaphore = 0x0
SpinCount = 0x0
El siguiente comando muestra información sobre todas las secciones críticas activas del proceso actual.
## 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
...
El siguiente comando muestra el árbol de secciones críticas.
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
Los siguientes elementos aparecen en esta visualización de !cs -t:
InitThr es el identificador de subproceso del subproceso que inicializó el CS.
EnterThr es el identificador del subproceso que llamó a EnterCriticalSection la última vez.
WaitThr es el identificador del subproceso que encontró la sección crítica que otro subproceso tenía y esperaba por última vez.
TryEnThr es el identificador del subproceso que llamó a TryEnterCriticalSection la última vez.
LeaveThr es el identificador del subproceso que llamó a LeaveCriticalSection la última vez.
EnterCnt es el recuento de EnterCriticalSection.
WaitCnt es el recuento de contención.
Consulte también
Visualización de una sección crítica
Tiempos de espera de sección crítica (modo de usuario)