2010-02-04 2 views
8

SOS의! SyncBlk 명령으로 생성 된 출력에 대한 설명을 찾고 있습니다.WinDbg/SOS : 설명! SyncBlk 출력

특히 "MonitorHeld"열에 대한 유용한 설명이 없습니다. 이 열은 일련의 크래시 덤프에서 높은 값을 표시합니다.

예 :

0:000> !SyncBlk 
Index   SyncBlock MonitorHeld Recursion Owning Thread Info   SyncBlock Owner 
    44 0000000005a5c228   1   1 000000000e7a6740 2304 273 000000019f858cd0 System.Object 
    48 000000000579bae8   1   1 000000000e7a72e0 2370 275 000000015f999900 System.Object 
    52 000000000579b9c8   1   1 0000000011bbd3b0 1e98 295 00000000ff89fe08 System.Object 
    54 000000000579b938   1   1 000000000e7a38c0 1be4 249 000000013f8aa888 System.Object 
    108 0000000005a5bfe8   1   1 000000000e79f300 224c 242 00000000ff8a5828 System.Object 
    110 0000000005a5c078   1   1 000000000e79ca50 2290 262 000000015f9a8020 System.Object 
    112 0000000005a5c108   1   1 0000000011bb70e0 1d38 236 000000015f99e408 System.Object 
    114 000000000579b620   1   1 0000000011bb93c0 1884 304 00000001bf974a90 System.Object 
    124 0000000005a44d48   1   1 000000000e7a6170 2300 272 000000019f853fe8 System.Object 
    146 0000000005a44688   99   1 000000000588cbf0 13e0 38 000000017f71c4f8 System.Object 
    155 0000000005a44f88   1   1 0000000011bba530 2274 301 000000019f82f120 System.Object 
    157 0000000005a45018   1   1 0000000011bbf0c0 2034 290 000000015f952980 System.Object 

사람이 열 "MonitorHeld"의 "99"을 설명 할 수 있습니까?

누구에게이 명령의 전체 참조 문서에 대한 링크가 있습니까?

감사합니다, 알렉스

답변

17

MonitorHeld은 특정 SyncBlk 보유 얼마나 많은 모니터를 말합니다.

자물쇠에 경합 할 때마다 1 명의 소유자가 syncblk을 보유하게됩니다. 자물쇠에있는 각 웨이터는 2를 보유합니다.

99는 자물쇠를 "소유"하고 자물쇠를 기다리는 49 개의 물체가 있음을 의미합니다.

!syncblk에 대한 가장 적합한 토론과 설명은 this one by Tess Ferrandez입니다.

3

리드가 언급 한 것 외에도 SOSEX.dll 확장의! dlk 명령을 사용하여 교착 상태를 확인할 수 있습니다.

+0

매우 흥미로 우며이 확장 프로그램에 대해 알지 못했습니다! – Alex

+0

! dlk는 매우 유용하지만 모든 교착 상태를 찾지는 못합니다. –

+0

sosex가 .NET 4에 비해 구식 인 것 같습니다. psscor4는 내가 찾은 유일한 옵션입니다. – IgorK