Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Расширение !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 — это количество спорных запросов.
См. также
Отображение критического раздела
Критические истечение времени ожидания разделов (режим пользователя)