WinDbg

2010-12-07 11 views
124

पृष्ठभूमि में एसओएस लोड करने में असमर्थ पृष्ठभूमि: मैं WinDbg के लिए नया हूं और इसे पहली बार चलाने की कोशिश कर रहा हूं। मैं विंडोज सर्वर 2008 (x86) पर आईआईएस 7 में होस्ट की गई एक चल रही एएसपी.NET 4 साइट से लिया गया मेमोरी डंप की जांच करना चाहता हूं और मेरी स्थानीय मशीन पर डाउनलोड किया गया है।WinDbg

मैंने debugging tools स्थापित किया और क्रैश डंप खोलने के लिए पहली बार WinDbg लॉन्च किया। मैं फ़ाइल पर गया था प्रतीक फ़ाइल पथ और "* srv * c: \ symbols * http: //msdl.microsoft.com/downloads/symbols*" को पथ सेट करें और लोड करने के लिए सभी प्रतीकों के लिए प्रतीक्षा की।

एसओएस लोड करने का प्रयास करते समय, मैं समस्याओं में भाग गया। सबसे पहले, मैंने निम्नलिखित कमांड की कोशिश की ...

.loadby sos mscorwks 

... और प्रतिक्रिया मिली "मॉड्यूल 'mscorwks' खोजने में असमर्थ"।

वेब परिशोध के बाद, मैं निम्नलिखित कमांड को क्रियान्वित mscorwks लोड करने के लिए ...

sxe ld mscorwks.dll 
g 

कोशिश की ... और प्रतिक्रिया

" 'जी' में कोई runnable debuggees त्रुटि" प्राप्त मैं SOS.dll (सी से: \ Windows \ Microsoft.NET \ फ्रेमवर्क \ v4.0.30319) की नकल की WinDbg निर्देशिका में है, तो कोशिश की ...

.load sos 

... और त्रुटि प्राप्त ...

The call to LoadLibrary(sos) failed, Win32 error 0n193 
    "%1 is not a valid Win32 application." 
Please check your debugger configuration and/or network access. 

मुझे पूरा यकीन नहीं है कि कैसे आगे बढ़ना है। मैं सिर्फ एसओएस लोड करना चाहता हूं और इस डंप फ़ाइल के चारों ओर खोदना चाहता हूं। किसी भी तरह की सहायता का स्वागत किया जाएगा।

Fyi ... मैं विंडबग के 64-बिट संस्करण के साथ विंडोज 7 के 64-बिट संस्करण पर डंप फ़ाइल खोलने की कोशिश कर रहा हूं।

उत्तर

190

सीएलआर रनटाइम डीएल का नाम बदलकर clr.dll को .NET 4 के साथ बदल दिया गया था। इसलिए एसओएस के सही संस्करण को लोड करने के लिए आपको अपने .loadby कमांड को समायोजित करने की आवश्यकता है। अर्थात।

.loadby sos clr 

इसके अलावा, अगर आप 64 बिट पर हैं, आप Debugging Tools for Windows के 32 बिट संस्करण के रूप में अच्छी तरह से आदेश 32 बिट क्षुधा डिबग करने में स्थापित करना चाहिए। वे साइड-बाय-साइड स्थापित करते हैं, इसलिए उसी मशीन पर 32 बिट और 64 बिट संस्करण दोनों में कोई समस्या नहीं है।

मैं SOS.dll की प्रतिलिपि बनाने के खिलाफ सलाह दूंगा। एसओएस को ढांचे के सटीक संस्करण से मेल खाना चाहिए, इसलिए जब तक आप .loadby का उपयोग करके फ्रेमवर्क निर्देशिका से इसे लोड करते हैं, तो आप पूरी तरह से सेट हो जाते हैं।

+0

बिल्कुल सही। महान काम किया। बहुत बहुत धन्यवाद! –

+0

@ केविन: मेरी खुशी। –

+0

मुझे अपने सिस्टम पर दोनों को पाने के लिए चुनौतीपूर्ण लग रहा है, क्योंकि नवीनतम इंस्टॉलर CPU प्रकार को स्वतः खोजते हैं। क्या एमएसआई के बारे में आप जानते हैं कि एक ओवरराइड ध्वज है? मैं WinDbg का एक पुराना 32 बिट संस्करण स्थापित करने जा रहा हूं, लेकिन यह नहीं पता कि क्या उम्मीद करनी है। – Dave

14

WinDbg आदेश 'जी' का मतलब है [जारी रखें]

जब से तुम एक डंप फ़ाइल कोई रास्ता नहीं 'जारी रखें' करने के लिए है खोलने जा रहे है, यह केवल प्रक्रिया स्मृति में शामिल है।

तो संदेश " 'जी' में कोई runnable debuggees त्रुटि" आपके मामले में तार्किक के बाद से प्रक्रिया नहीं चल रहा है।

एसओएस के सही संस्करण को लोड करने के बारे में .NET संस्करण के आधार पर निम्न आदेश का उपयोग करें।

.NET 4 और उच्च.loadby एसओएस

.NET 3.5 और 2 एसओएस mscorwks

नेट 1.0 और 1.1 .load clr10 .loadby \ sos

0

बस एसओएस लोड करने के समान मुद्दे पर आया और "निर्दिष्ट मॉड्यूल नहीं मिला"। एक अलग समाधान के साथ आया था, इसलिए यदि समाधान यहाँ तुम्हारी मदद नहीं करते हैं, यह बाहर की कोशिश:

.loadby sos clr - specified module could not be found

0

जरूरत सुधार ऊपर उत्तर, समय चीजों के पाठ्यक्रम पर के बाद से एसओएस लोड हो रहा है संभाल करने के लिए आसान हो गया है।

जॉन रॉबिन्स के पास article अच्छा है, यह देखें कि माइक्रोसॉफ्ट प्रतीक सर्वर प्रतीक फ़ाइल पथ में कॉन्फ़िगर किए गए हैं और चलाएं! Windbg प्रॉम्प्ट पर विश्लेषण -v, यह चाल करेगा यह एसओएस फाइलों को डाउनलोड करेगा। प्रॉम्प्ट पर रन .chain सत्यापित करने के लिए और आप लोड डीएल देखेंगे।

संबंधित मुद्दे