WinDbg में SOS लोड करने में असमर्थ


132

बैकग्राउंड: मैं विनडब के लिए नया हूं और पहली बार इसे चलाने की कोशिश कर रहा हूं। मैं Windows Server 2008 (x86) पर IIS 7 में होस्ट किए गए ASP.NET 4 साइट पर चल रहे एक मेमोरी डंप की जांच करना चाहता हूं और अपने स्थानीय मशीन पर डाउनलोड किया।

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

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

.loadby sos mscorwks

... और प्रतिक्रिया मिली Unable to find module 'mscorwks'

वेब को परिमार्जित करने के बाद, मैंने निम्नलिखित कमांड को निष्पादित करके mscorwks लोड करने का प्रयास किया ...

sxe ld mscorwks.dll
g

... और प्रतिक्रिया मिली "जी 'में कोई रनवेबल डिबगेज त्रुटि नहीं"

मैंने WinDbg निर्देशिका में SOS.dll (C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 से) की प्रतिलिपि बनाई, फिर कोशिश की ...

.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.

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

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

जवाबों:


203

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

.loadby sos clr

साथ ही, यदि आप 64 बिट पर हैं, तो आपको 32 बिट ऐप्स को डीबग करने के लिए विंडोज के लिए डिबगिंग टूल्स के 32 बिट संस्करण को स्थापित करना चाहिए । वे अगल-बगल स्थापित होते हैं, इसलिए एक ही मशीन पर 32 बिट और 64 बिट संस्करण दोनों होने में कोई समस्या नहीं है।

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


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

5
@Dave: शायद बहुत कम देर से, लेकिन यहां स्थापित वेबपेज के अनुसार: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx आप Redistributable संकुल को स्थापित करने के लिए चुन सकते हैं जो यहाँ प्रत्येक आर्किटेक्चर संस्करण के लिए MSI है । : C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Windows के लिए उपकरण डिबगिंग
आरोन लिर्च

अगर मैं कहूं तो .loadby sos clrमुझे मिल जाएगा Unable to find module 'clr'। मैं x64 विनडबग के साथ .NET 4 को डिबग करने की कोशिश कर रहा हूं
Csaba Toth

2
@CabaToth यह एक डंप है या आप लाइव डिबगिंग कर रहे हैं? यदि आप लाइव डिबगिंग कर रहे हैं तो CLR अभी तक लोड नहीं किया गया है। आप sxe ld clrबंद करने के लिए कर सकते हैं जब सीएलआर लोड किया गया है और फिर आप उस बिंदु पर एसओएस लोड कर सकते हैं।
ब्रायन रासमुसेन

@BrianRasmussen यह एक संकलित निष्पादन योग्य है। अगर मैं मॉड्यूल विंडो पर नज़र डालूं, तो इसे लोड किया गया है।
तोथ

18

WinDbg कमांड 'g' का अर्थ है [जारी रखें]

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

इसलिए " जी 'में कोई भी रनवेबल डिबगेज त्रुटि संदेश आपके मामले में तर्कसंगत नहीं है क्योंकि प्रक्रिया नहीं चल रही है

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

नेट 4 और उच्च .loadby एसओएस

.NET 3.5 और 2 .loadby sos mscorwks

.NET 1.0 और 1.1 .लोड clr10 \ sos


1

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

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


0

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

.loadby sos clr - निर्दिष्ट मॉड्यूल नहीं मिला

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.