2012-06-08 20 views
5

सबसे पहले, windbg में प्रत्येक एसओएस कमांड के लिए मदद और पैरामीटर प्राप्त करने के लिए कोई आदेश है?कृपया समझाएं! Syncblk windbg कमांड

दूसरे, मैं !syncblk उत्पादन को समझने के लिए

Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 
    201 05b9493c   979   1 05bc1040 bcc 45 022f3490 System.Collections.ArrayList 
2875 05b4c914   1   1 17b99e10 1af8 290 024862d8 MyClass 
2945 05b4b66c   1   1 17d1a290 12c0 752 02482940 MyClass 

MonitorHeldsynblk द्वारा आयोजित की निगरानी की # पता चलता करना चाहते हैं। लिखने के लिए 1 और पढ़ने के लिए 2, लेकिन शेष कॉलम का क्या अर्थ है?

मैं एक सी # कोड

MyClass MyObj; 
MyObj = new MyClass(); 

अब है कहो अगर मैं ऐसा

lock (MyObj) 
{ 
} 

विल syncblk मालिक स्तंभ शो "MyClass"? इसी तरह जब मैं यह !SyncBlk कमांड चलाता हूं, तो यह मुझे वास्तव में क्या दिखा रहा है? क्या यह मुझे lock() और Monitor.Enter और Mutex() और अन्य लॉकिंग तंत्र की संख्या दिखा रहा है?

उत्तर

7

एसओएस कमांड के लिए सहायता प्राप्त करने के लिए !help या !sos.help टाइप करें। विशिष्ट आदेशों पर सहायता प्राप्त करने के लिए !help <command> टाइप करें। एसओएस के लिए सहायता ग्रंथ भी available online हैं। ऑनलाइन संस्करण आपको कमांड का अवलोकन देता है। अतिरिक्त विवरण के लिए !help syncblk का उपयोग करें।

!syncblk का आउटपुट आपको थ्रेड आईडी (नीचे आउटपुट में हेडर # 1), ऑब्जेक्ट और लॉक करने के लिए प्रयुक्त ऑब्जेक्ट का प्रकार दिखाता है (हेडर # 2)।

         +-------#1-------+ +-----#2------+ 
Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 
    201 05b9493c   979   1 05bc1040 bcc 45 022f3490 System.Collections.ArrayList 
2875 05b4c914   1   1 17b99e10 1af8 290 024862d8 MyClass 
2945 05b4b66c   1   1 17d1a290 12c0 752 02482940 MyClass 

1) पहला मान थ्रेड ऑब्जेक्ट है, दूसरा मूल थ्रेड आईडी है और अंतिम WinDbg थ्रेड आईडी है।

2) पहला मान ऑब्जेक्ट लॉक करने के लिए उपयोग किया जाता है और दूसरा मान इस ऑब्जेक्ट का प्रकार है।

!syncblk केवल आंतरिक .NET ताले को कवर करता है, इसलिए Mutex (जो एक कर्नेल ऑब्जेक्ट है) यहां शामिल नहीं है।

आपके उदाहरण में लॉक स्टेटमेंट चलाने वाले कोड की थ्रेड आईडी पते MyObj अंक और MyClass के साथ दिखाई देगी।

+0

क्या आप कृपया बता सकते हैं कि कौन सा कॉलम दिखाता है? 2 सिंकब्लॉक कॉलम हैं। – bsobaid

+0

मैंने स्पष्टीकरण के लिए अपना जवाब अपडेट कर दिया है। अगर यह अभी भी स्पष्ट नहीं है तो कृपया मुझे बताएं। –

+0

धन्यवाद, और कॉलम 1,2, और 4 का क्या अर्थ है? WinDbgId का उपयोग धागे को ड्रिल करने के लिए किया जाता है? कुछ ~ 45e! clrstack की तरह? क्या कोड की रेखा जानने का कोई तरीका है जहां दिया गया सिंकब्लॉक लाइन थ्रेड के लिए होल्डिंग/प्रतीक्षा कर रही है? – bsobaid