windbg cs

!cs 扩展显示一个或多个临界区(critical section)或者整个临界区树

!cs Address 指定要显示的临界区地址。如果省略该参数,调试器显示当前进程中所有临界区。
 
0:003> !cs 00403370   
-----------------------------------------  
Critical section   = 0x00403370 (test2+0x3370)  
DebugInfo          = 0x7c99e9e0  
LOCKED  
LockCount          = 0x1  
OwningThread       = 0x0000185c  
RecursionCount     = 0x1  
LockSemaphore      = 0x2C  
SpinCount          = 0x00000000  

  这里LockCount为1意思为除了一个线程拥有它外,另外还有一个线程在等待它,它是由EnterCriticalSection增加,LeaveCriticalSection来减小的,如果临界区是有信号的,则显示NOT LOCKED(值为-1)。

  OwningThread表示拥有这个临界区的线程ID,RecursionCount表示拥有线程调了几次EnterCriticalSection,这其实也影响到了LockCount,如果拥有线程多调用一次EnterCriticalSection,那么 LockCount也会相应加1,因为LockCount标识了任意线程调用EnterCriticalSection请求这个互斥量的次数减1,(所以0-1=-1为NOT LOCKED)当然,前面如果调用了LeaveCriticalSection,那么 LockCount也会相应减1。

       !cs -s 如果可能的话,显示每个临界区的初始堆栈回溯。!cs -l 仅显示锁定的临界区。!cs -o 对所有显示出来的已锁定的临界区,显示所有者的堆栈。
posted @ 2016-12-19 18:26  任智康  阅读(578)  评论(0编辑  收藏  举报