!cs
!cs 拡張機能には、1 つ以上のクリティカル セクションまたはクリティカル セクション ツリー全体が表示されます。
!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
追加情報
重要なセクション情報を表示できるその他のコマンドと拡張機能については、クリティカル セクションの表示を参照してください。 重要なセクションの詳細については、Microsoft Windows SDK ドキュメント、Windows Driver Kit (WDK) ドキュメント、および Mark Russinovich と David Solomon によるMicrosoft Windows Internalsを参照してください。
解説
!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 は競合数です。
関連項目
クリティカル セクションのタイムアウト (ユーザーモード)