다음을 통해 공유


!Cs

!cs 확장은 하나 이상의 중요한 섹션 또는 전체 중요 섹션 트리를 표시합니다.

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

매개 변수

매개 변수 설명
-s 이 정보를 사용할 수 있는 경우 각 중요한 섹션의 초기화 스택 추적을 표시합니다.
-l 잠긴 중요 섹션만 표시합니다.
-o 표시되는 잠긴 중요 섹션에 대한 소유자의 스택을 표시합니다.
주소 표시할 중요 섹션의 주소를 지정합니다. 이 매개 변수를 생략하면 디버거는 현재 프로세스의 모든 중요한 섹션을 표시합니다.
StartAddress 중요한 섹션을 검색할 주소 범위의 시작을 지정합니다.
EndAddress 중요한 섹션을 검색할 주소 범위의 끝을 지정합니다.
-d DebugInfo와 연결된 중요한 섹션을 표시합니다.
InfoAddress DebugInfo의 주소를 지정합니다.
-t 중요한 섹션 트리를 표시합니다. -t 옵션을 사용하려면 먼저 대상 프로세스에 대한 애플리케이션 검증 도구를 활성화하고 잠금 사용량 확인 옵션을 선택해야 합니다.
TreeAddress 중요한 섹션 트리의 루트 주소를 지정합니다. 이 매개 변수를 생략하거나 0을 지정하면 디버거는 현재 프로세스에 대한 중요한 섹션 트리를 표시합니다.
-? 디버거 명령 창이 확장에 대한 도움말 텍스트를 표시합니다.

DLL

Exts.dll

추가 정보

중요한 섹션 정보를 표시할 수 있는 다른 명령 및 확장은 중요 섹션 표시를 참조하세요. 중요한 섹션에 대한 자세한 내용은 Microsoft Windows SDK 설명서, WDK(Windows 드라이버 키트) 설명서 및 Mark Russinovich 및 David Solomon의 Microsoft Windows 내부 문서를 참조하세요.

설명

!cs 확장에는 디버그 중인 프로세스 및 Ntdll.dll 대한 전체 기호(형식 정보 포함)가 필요합니다.

다음 예제에서는 !cs를 사용하는 방법을 보여 줍니다. 다음 명령은 주소 0x7803B0F8 중요한 섹션에 대한 정보를 표시하고 초기화 스택 추적을 보여 줍니다.

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

다음 명령은 DebugInfo가 주소 0x6A262080 중요한 섹션에 대한 정보를 표시합니다.

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

다음 명령은 현재 프로세스의 모든 활성 중요 섹션에 대한 정보를 표시합니다.

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

...

다음 명령은 중요한 섹션 트리를 표시합니다.

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

다음 항목이 ! cs -t 표시에 표시됩니다.

  • InitThr 은 CS를 초기화한 스레드의 스레드 ID입니다.

  • EnterThr은 EnterCriticalSection을 마지막으로 호출한 스레드의 ID입니다.

  • WaitThr 는 다른 스레드가 소유하고 마지막으로 기다린 중요한 섹션을 찾은 스레드의 ID입니다.

  • TryEnThr은 TryEnterCriticalSection을 마지막으로 호출한 스레드의 ID입니다.

  • LeaveThr는 마지막으로 LeaveCriticalSection을 호출한 스레드의 ID입니다.

  • EnterCnt는 EnterCriticalSection수입니다.

  • WaitCnt 는 경합 수입니다.

참고 항목

!ntsdexts.locks

중요 섹션 표시

중요 섹션 시간 초과 (사용자 모드)