Condividi tramite


!Cs

L'estensione !cs visualizza una o più sezioni critiche o l'intero albero delle sezioni critiche.

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

Parametri

Parametro Descrizione
-s Visualizza l'analisi dello stack di inizializzazione di ogni sezione critica, se queste informazioni sono disponibili.
-l Visualizza solo le sezioni critiche bloccate.
-o Visualizza lo stack del proprietario per qualsiasi sezione critica bloccata visualizzata.
Indirizzo Specifica l'indirizzo della sezione critica da visualizzare. Se si omette questo parametro, il debugger visualizza tutte le sezioni critiche nel processo corrente.
StartAddress Specifica l'inizio dell'intervallo di indirizzi in cui cercare sezioni critiche.
EndAddress Specifica la fine dell'intervallo di indirizzi in cui cercare sezioni critiche.
-d Visualizza le sezioni critiche associate a DebugInfo.
InfoAddress Specifica l'indirizzo dell'oggetto DebugInfo.
-t Visualizza un albero di sezioni critiche. Prima di poter usare l'opzione -t , è necessario attivare Application Verifier per il processo di destinazione e selezionare l'opzione Controlla utilizzo blocco.
TreeAddress Specifica l'indirizzo della radice dell'albero delle sezioni critiche. Se si omette questo parametro o si specifica zero, il debugger visualizza l'albero delle sezioni critiche per il processo corrente.
-? Visualizza il testo della Guida per questa estensione nella finestra Del comando del debugger.

DLL

Exts.dll

Informazioni aggiuntive

Per altri comandi ed estensioni in grado di visualizzare informazioni sulla sezione critica, vedere Visualizzazione di una sezione critica. Per altre informazioni sulle sezioni critiche, vedere la documentazione di Microsoft Windows SDK, la documentazione di Windows Driver Kit (WDK) e microsoft Windows Internals di Mark Russinovich e David Solomon.

Osservazioni:

L'estensione !cs richiede simboli completi (incluse le informazioni sul tipo) per il processo di cui è in corso il debug e per Ntdll.dll.

Gli esempi seguenti illustrano come usare !cs. Il comando seguente visualizza informazioni sulla sezione critica all'indirizzo 0x7803B0F8 e mostra la relativa analisi dello stack di inizializzazione.

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

Il comando seguente visualizza informazioni sulla sezione critica di cui DebugInfo si trova all'indirizzo 0x6A262080.

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

Il comando seguente visualizza informazioni su tutte le sezioni critiche attive nel processo corrente.

## 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

...

Il comando seguente visualizza l'albero delle sezioni critiche.

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

Gli elementi seguenti vengono visualizzati in questo display !cs -t :

  • InitThr è l'ID thread per il thread che ha inizializzato cs.

  • EnterThr è l'ID del thread che ha chiamato EnterCriticalSection l'ultima volta.

  • WaitThr è l'ID del thread che ha trovato la sezione critica di proprietà di un altro thread e ha aspettato per l'ultima volta.

  • TryEnThr è l'ID del thread che ha chiamato TryEnterCriticalSection l'ultima volta.

  • LeaveThr è l'ID del thread che ha chiamato LeaveCriticalSection l'ultima volta

  • EnterCnt è il conteggio di EnterCriticalSection.

  • WaitCnt è il conteggio dei conflitti.

Vedi anche

!ntsdexts.locks

Visualizzazione di una sezione critica

Timeout della sezione critica (modalità utente)