!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
其他資訊
如需可顯示重要區段資訊的其他命令和延伸模組,請參閱 顯示重大區段。 如需重要章節的詳細資訊,請參閱 Microsoft Windows SDK 檔、Windows 驅動程式套件 (WDK) 檔和 Mark Russinovich 和 David 所羅門的 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 是上次呼叫 EnterCriticalSection 之線程的標識碼。
WaitThr 是線程的標識碼,該線程發現另一個線程擁有的重要區段,並上次等候該區段。
TryEnThr 是上次呼叫 TryEnterCriticalSection 之線程的標識碼。
LeaveThr 是上次呼叫 LeaveCriticalSection 的線程標識符
EnterCnt 是 EnterCriticalSection 的計數。
WaitCnt 是爭用計數。
另請參閱
重大區段逾 時 (使用者模式)