2011-09-15 33 views
37

मुझे अपने कुछ ऐप्स में कोई समस्या है। यह Windows 2003 सर्वर में IIS6 के तहत चल रहा एक WCF आधारित एप्लिकेशन (x86) है: मैं से इस तरह के कोई त्रुटि मिलती है
इवेंट लॉग इन करें "W3SVC-WP" स्रोत (EventID = 2262):WinDbg में "एसओएस का संस्करण सीएलआर के संस्करण से मेल नहीं खाता है जो आप डीबगिंग कर रहे हैं" के साथ क्या करना है?

ISAPI 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll' reported itself as unhealthy for the following reason: 'Deadlock detected'. 

मैं क्या हो रहा है यह पता लगाने की कोशिश कर रहा है। मैंने KB में वर्णित अनाथ वर्कर प्रक्रिया के लिए डंप बनाने की स्थापना की है। जब एक डेडलॉक हुआ एक मिनीडम्प बनाया गया है।
फिर मैं यह समझने की कोशिश करने के लिए यह मिनीडम्प लेता हूं कि क्या हुआ है। यहाँ मैं अटक गया हूँ।

मैं WinDbg 86, मेरे डंप और फिर खोलने चलाएँ:

0:037> .loadby sos clr 
0:037> .sympath SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols 
Symbol search path is: SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols 
Expanded Symbol search path is: srv*c:\temp\symbols*http://msdl.microsoft.com/download/symbols 
0:037> !clrstack 
The version of SOS does not match the version of CLR you are debugging. Please load the matching version of SOS for the version of CLR you are debugging. 
CLR Version: 4.0.30319.1 
SOS Version: 4.0.30319.235 
CLRDLL: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll:4.0.30319.235 f:8 doesn't match desired version 4.0.30319.01 f:8 
CLRDLL: Loaded DLL c:\temp\symbols\mscordacwks_x86_x86_4.0.30319.01.dll\4BA1D9EF66f000\mscordacwks_x86_x86_4.0.30319.01.dll 
OS Thread Id: 0x690 (37) 
Unable to walk the managed stack. The current thread is likely not a managed thread. 
You can run !threads to get a list of managed threads in the process 

इस त्रुटि साथ क्या करना है - "एसओएस के संस्करण CLR आप डीबग कर रहे हैं के संस्करण से मेल नहीं खाता"?

एक ही त्रुटि ("एसओएस का संस्करण सीएलआर के संस्करण से मेल नहीं खाता है जो आप डिबगिंग कर रहे हैं") जब मैं वीएस -2010 में मिनीडम्प खोलता हूं तो मुझे मिल रहा है।

मैं इस पोस्ट पढ़ा है - http://tech-thinker.com/Forums/tabid/62/forumid/12/postid/471/scope/posts/Default.aspx, और KB2518870 स्थापित करने की कोशिश की। यह मदद नहीं करता है।

+0

एसओएस/एमएसकॉर्डैकडब्ल्यूकेएस संगतता के बारे में अच्छा लेख - http://jonathan.dickinsons.co.za/blog/2010/08/windbg-stack-fix/ – Shrike

+0

इससे मेरी मदद मिली: http://blogs.msdn.com/ बी/डौगस्ट/संग्रह/200 9/02/18/असफल-टू-लोड-डेटा-एक्सेस-डीएल -0x80004005-या-what-is-mscordacwks-dll.aspx – Wally

उत्तर

23

WinDbg डिबगिंग एडाप्टर mscordacwks.dll का उपयोग करने में सक्षम नहीं होगा जब तक यह मूल मशीन से एक जैसा संस्करण न हो। आप इस डीएलएल को लक्ष्य मशीन से कॉपी करके इस त्रुटि को प्राप्त कर सकते हैं जिसने विंडोज निर्देशिका के लिए अपने डीबगिंग टूल्स पर डंप उत्पन्न किया है।

हम WinDbg के साथ .NET 2.0 अनुप्रयोगों को डीबग करते हैं। हम mscordacwks_x86_x86_2.0.50727.3615.dll के संबंध में लगातार यही त्रुटि प्राप्त करेंगे। विंडोज (x86) \ फ़ोल्डर के लिए \ Program Files \ डिबगिंग उपकरण: मैं अपने ग्राहक पर सर्वर से इस फ़ाइल की प्रतिलिपि और सी में रख किया था। WinDbg उसके बाद शिकायत बंद कर दिया।

यदि सब और विफल रहता है, तो आप एक ही सर्वर जिसमें से आप क्रैश डम्प लिया गया पर WinDbg साथ डिबगिंग कोशिश कर सकते हैं।

+0

धन्यवाद। बीटीडब्ल्यू ऐसा लगता है कि .sppath वैश्विक स्तर पर आपूर्ति पथ स्थापित किया। – Shrike

41

यह वही मेरे लिए काम किया है: इस फ़ोल्डर से

  • clr.dll
  • mscordacwks.dll
  • SOS.dll

:

डाउनलोड निम्नलिखित DLLs डंप उत्पन्न करने वाली मशीन पर:

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

निम्न आदेश चलाएं। SOS.DLL के लिए पथ के बिना उद्धरण नहीं छोड़ा जाएगा पथ सीमांकक होना चाहिए:

डाउनलोड किया एसओएस को पथ .load।DLL

मुझे लगता है कि यह काम करने के लिए के लिए एक नया WinDbg सत्र की आवश्यकता है।

+3

मैंने psscor4.dll लोड किया था और लक्ष्य से clr sos और mscordacwks को पकड़ने के लिए आपकी सलाह का पालन किया था। यह मेरे लिए तय है। – GregC

+0

अगर मुझे दोषपूर्ण मशीन तक पहुंच नहीं है तो मैं उन डीएलएल के सही संस्करण कहां प्राप्त कर सकता हूं? मैं उन डीएलएल को सही विंडोज अपडेट से ढूंढ सकता हूं (उदाहरण के लिए, [यह एक] (http://support.microsoft.com/kb/2898870)), और अद्यतन फ़ाइल (.msu) डाउनलोड की है। लेकिन जब मैं '.msu' फ़ाइल को अनजिप करता हूं, तो वे केवल कैब फ़ाइल का एक गुच्छा हैं। मुझे सीएलआर बाइनरी के सभी संस्करणों को डाउनलोड करने के लिए एक वेबसाइट याद आ रही थी। – KFL

6
The version of SOS does not match the version of CLR you are debugging. Please load the matching version of SOS for the version of CLR you are debugging. 
CLR Version: 4.0.30319.1 
SOS Version: 4.0.30319.235 

इस लक्ष्य मशीन जो बना डंप CLR संस्करण 4.0.30319.1 पर चल रहा है इसका मतलब है।
आपका सिस्टम संस्करण 4.0.30319.235 के साथ चल रहा है।

ऐसा इसलिए है क्योंकि .NET 4.0 में एक सुरक्षा अद्यतन था जिसने CLR और SOS फ़ाइलों को बदल दिया। और कुछ कंप्यूटरों में अभी तक यह अद्यतन नहीं हो सकता है।

देखें: http://support.microsoft.com/kb/2572078

इस ढेर में लाइनों में से कुछ का कारण थोड़ा गलत हो सकता है ... आप SOS.dll और CLR.dll प्राप्त करने के द्वारा त्रुटि से बचने कर सकते हैं और mscordacwks.dll और mscorwks.dll मूल संस्करण के और जब आप एसओएस लोड करते हैं तो लोड करें।
मूल फाइलें सामान्यतः निम्नानुसार हैं: सी: \ विंडोज \ माइक्रोसॉफ्ट.NET \ Framework \ v4.0.30319
फ्रेमवर्क संस्करण पर निर्भर करता है ... और फिर उन्हें एक विशिष्ट फ़ोल्डर में कॉपी करें।
इस तरह सही फ़ाइलें लोड करें:

.load C:\CurrectFiles\sos 

ध्यान दें कि यह सिर्फ "SOS" है और sos.dll नहीं।

2

आप स्वचालित रूप से सही SOS.dll लोड कर सकते हैं। जॉन रॉबिन्स के महान ब्लॉग पोस्ट को देखें http://wintellect.com/blogs/jrobbins/automatically-load-the-right-sos-for-the-minidump

आप .chain से पहले से लोड हो चुके हैं जो भी पहले से लोड हो सकता है। कुछ मामलों में आपको पहले लोड करना होगा (उदा। .unload sos) पहले गलत लोड किए गए डीएलएस।

16

कोर समस्या आम तौर पर एक बेमेल mscordacwks.dll संस्करण (mscorwks.dll ही करता है, तो एक पूर्ण डम्प लिया गया था की जरूरत नहीं किया जाना चाहिए) के साथ निहित है। सिद्धांत रूप में, यह प्रतीक सर्वर से प्राप्य होना चाहिए - बस .cordll -ve -u -l चलाएं। mscordacwks.dll पर अधिक जानकारी के लिए Failed to load data access DLL, 0x80004005” – OR – What is mscordacwks.dll देखें।

दुर्भाग्यवश, mscordacwks.dll के कुछ संस्करणों को अनुक्रमित नहीं किया गया है, जिसका अर्थ है कि उपर्युक्त हमेशा काम नहीं करेगा। ऐसे मामलों में आप मशीन से सही संस्करण को आजमा सकते हैं और जिस पर डंप लिया गया था, Yocahi और Thomas उल्लेख किया गया है (उदा। C:\Windows\Microsoft.NET\Framework64\v4.0.30319 से)। एक बार इसे प्राप्त करने के बाद, इसे लोड करने के लिए निम्न आदेश जारी करें: .cordll -u -ve -lp PathToFolderContainingMscorDAC। बेशक, वह मशीन अप्राप्य हो सकती है, या डंप के समय के बाद से इसे पैच किया जा सकता है।

सौभाग्य से, वहाँ है एक way to extract mscorwdacwks.dll from the actual update KB package (यह स्वयं निष्पादन योग्य निकालने के अंदर cab फ़ाइलों में से एक में रहता है - यह निकालने के लिए एक उपकरण के रूप में 7-Zip उपयोग करें)। वहाँ भंडार मौजूद हैं।नेट अद्यतन (एमएस कर्मचारी डौग स्टीवर्ट के सौजन्य से), ताकि आप उन्हें सही बिल्ड नंबर के लिए ब्राउज़ कर सकते हैं आप की आवश्यकता:

आपके द्वारा सही mscordacwks.dll है, SOS.dll अधिकांश मामलों में चेतावनी को नजरअंदाज कर दिया जा सकता है, क्योंकि सबसे हालिया SOS.dll संस्करण चेतावनी के बावजूद अधिकांश समय काम करेगा। हालांकि, कुछ मामलों में सही SOS.dll संस्करण भी आवश्यक है (और बोनस के रूप में आप अजीब चेतावनियों से छुटकारा पाएं)। एक blog post को Dunken लिंक है कि इस संबंध में सहायक होना चाहिए (मूल रूप से आप _NT_SYMBOL_PATH वातावरण चर में प्रतीक सर्वर जगह है और लोड हो रहा हैSOS.dll पहले बिना !analyze –vचलाने के लिए की जरूरत है - यह सही संस्करण में ही लोड होगा)। यदि यह काम नहीं करता है, तो आप ऊपर वर्णित अद्यतन पैकेजों में से एक से SOS.dll निकालने का प्रयास कर सकते हैं। This site उस उद्देश्य के लिए उपयोग करना आसान साबित हो सकता है, क्योंकि यह विशेष रूप से SOS.dll संस्करणों को अनुक्रमित करता है।

अंत में, PsscorR2 (.NET 2.0-3.5 के लिए) और Psscor4 (.NET 4.0 के लिए) पर विचार करें। PsscorSOS.dll का एक सुपरसेट है जो कि विस्मृत संस्करणों के बारे में शिकायत नहीं करता है, जब तक कि आप उचित प्रमुख संस्करण का उपयोग कर रहे हों। यह ध्यान दिया जाना चाहिए कि समय के साथ, इसे SOS.dll के साथ ही बनाए रखा नहीं गया है, इसलिए उत्तरार्द्ध में पूर्व से अनुपस्थित संवर्द्धन और बग फिक्स शामिल हो सकते हैं। लिखने के समय .NET 4.5 के लिए Psscor संस्करण नहीं था।

1

संक्षेप में, निम्न कार्य करें:

  1. CLR संस्करण डंप
  2. खोजें फार्म और उचित माइक्रोसॉफ्ट पैच
  3. निकालें sos.dll डाउनलोड जाओ और mscordacwks.dll से पैच
  4. इसका उपयोग करें

नीचे एक उदाहरण है:

1. एक क्रैश डंप मैं संस्करण प्राप्त लोड करने के बाद मैं की जरूरत है:

>lm vm clr 

यह मेरे

File version:  4.0.30319.18051 

2. देता है मैं एमएस अपडेट के लिए Google हूं जिसमें यह संस्करण शामिल है:

sos.dll 4.0.30319.18051

इस मामले में Google एक डाउनलोड लिंक के साथ MS KB page देता है। मैं आमतौर पर x64 संस्करण डाउनलोड करता हूं, क्योंकि इसमें x86 और x64 dlls दोनों होते हैं, इसलिए मेरे पास Windows8-RT-KB2833958-x64.msu है।

नोट: कभी-कभी आवश्यक पैच प्राप्त करना मुश्किल होता है, लेकिन इस उदाहरण में नहीं।

3. का उपयोग FAR file manager मैं इस MSU से कैबिनेट संग्रह निकालें:

Windows8-RT-KB2833958-x64.cab

नोट: कभी कभी वहाँ कई अलमारियाँ अंदर हैं, तो आपको यह जांचने की आवश्यकता है कि किस में sos.dll है।

नोट: कभी कभी पैच, .EXE के रूप में वितरित कर रहे हैं, ताकि आप पहले MSU या एमएसपी फ़ाइलों को अलग (मैं दूर के साथ यह करना), और फिर उन लोगों से अलमारियाँ को निकालने के लिए की जरूरत है।

4. कभी कभी CABs से फाइल अब तक निकाला जा सकता है, लेकिन कभी कभी वे बहुत अलग संरचना है और मैं expand.exe का उपयोग WinAIK से। WinAIK 1.7 जीबी आईएसओ है, लेकिन आपको केवल एक छोटा सा हिस्सा चाहिए। मैं का उपयोग निम्नलिखित बैट फ़ाइल

mkdir Extracted 
..\winaik_amd64\servicing\Expand.exe "%1" -F:sos.dll "Extracted" 
..\winaik_amd64\servicing\Expand.exe "%1" -F:mscordacwks.dll "Extracted" 

यह आदेश अर्क निर्दिष्ट DLLs के सभी संस्करणों की अपनी निर्देशिका के अंदर हर एक। कभी-कभी mscordacwks.dll और sos.dll दोनों के 2 संस्करण होते हैं। मेरा मानना ​​है कि यह जीआरडी/एलडीआर (क्यूएफई) कर्मचारियों की वजह से है। हमारे उदाहरण में 4.0.3031 9 हैं। और 4.0.3031 9। । विंडोज एक्सप्लोरर के साथ फ़ाइल गुणों की जांच करें।

5. उचित रूप से फ़ाइलों का नाम बदलें: mscordacwks.dll रूप mscordacwks_% मेहराब% नामित किया जाना चाहिए _% मेहराब% _% संस्करण% .dll और sos.dll

के पास रखा

तो mscordacwks.dll (4.0.30319.18051) चला जाता है mscordacwks_AMD64_AMD64_4.0.30319.18051.dll को

(x86 संस्करण के लिए नाम बदलने mscordacwks_ x86_x86 _4.0.30319.18051.dll)

sos.dll के रूप में रह सकता है बरकरार है, लेकिन मैं sos.4.0.30319.18051.dll लिए इसका नाम बदलना

4.0 के लिए भी यही करें .30319.19079 संस्करण (संभव भविष्य की जरूरतों के लिए)

6. कॉपी 'C: \ एसओएस \' करने के लिए इन फ़ाइलों को फ़ोल्डर जो sos.4.xxxdll और mscordacwks_AMD64_AMD64_4.xxxdll की एक बहुत कुछ शामिल

7।mscordacwks संस्करण mscordacwks_AMD64_AMD64_4.6.1055 को कभी कभी नेट 4.5 के लिए आप अतिरिक्त जोड़ने की जरूरत है '0': साथ

.load C:\SOS\sos.4.0.30319.18051.dll 

नोट यह प्रयोग करें। mscordacwks_AMD64_AMD64_4.6.1055 के बजाय .dll। .dll। हालांकि मैं गहराई से खोद नहीं पाया, क्योंकि यह एक छोटे से समय सीमा के भीतर इसे संभाल सकता है।

बीटीडब्ल्यू, विनडबग कहेंगे कि अगर mscordacwks नहीं मिल पा रहे हैं और संस्करण निर्दिष्ट करेंगे (जो अंत में डबल '0' होगा)।