!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 | Указывает адрес корневого дерева критически важных разделов. Если этот параметр опущен или указать ноль, отладчик отображает дерево критически важных разделов для текущего процесса. |
-? | Отображает текст справки для этого расширения в окне команды отладчика. |
DLL-библиотеки
Exts.dll
Дополнительная информация
Другие команды и расширения, которые могут отображать критически важные сведения о разделе, см. в разделе "Отображение критического раздела". Дополнительные сведения о критически важных разделах см. в документации по пакету SDK для Microsoft Windows, документации по комплекту драйверов Windows (WDK) и внутренним службам 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.
EnterThr — это идентификатор потока, который в последний раз вызывал ВводCriticalSection .
WaitThr — это идентификатор потока, который нашел критически важный раздел, принадлежащий другому потоку, и ждал его в последний раз.
TryEnThr — это идентификатор потока, который в последний раз вызывал TryEnterCriticalSection .
LeaveThr — это идентификатор потока, который в последний раз называется LeaveCriticalSection
EnterCnt — это число enterCriticalSection.
WaitCnt — это количество спорных запросов.
См. также
Отображение критического раздела
Критические истечение времени ожидания разделов (режим пользователя)