8

के WER minidump को डीबग करने के लिए कैसे करें जब स्थापना समय पर .NET प्रबंधित अनुप्रयोग पर ngen निष्पादित किया जाता है, और ऐप के लिए Windows त्रुटि रिपोर्टिंग से क्रैश डंप पुनर्प्राप्त किया जाता है, तो आप इसका उपयोग कैसे कर सकते हैं एक स्टैक ट्रेस, चर, आदि देखें?"ngen" ed image

यहां प्रश्न से संबंधित कुछ पृष्ठभूमि है: हमारे पास एक .NET ऐप है जो इंस्टॉलेशन में ngened हो जाता है। जब यह एक अनचाहे .NET अपवाद के कारण क्रैश हो जाता है, तो क्रैश को Windows त्रुटि रिपोर्टिंग में बाधित किया जाता है, और इससे मैं winqual.microsoft.com से minidump.mdmp फ़ाइल डाउनलोड करने में सक्षम था।

मैंने minidump.mdmp को उस फ़ोल्डर में डाल दिया है जिसमें डीडीजी फाइलें हैं जो क्रैश किए गए ऐप के निर्माण के लिए हैं, और इसे डबल-क्लिक किया गया है minidump.mdmp इसे VS2008 SP1 के नए उदाहरण में खोलने के लिए। मेरे स्टैक ट्रेस इस तरह दिखता है:!

kernel32.dll RaiseException() + 0x3d बाइट्स
mscorwks.dll RaiseTheExceptionInternalOnly() + 0x295 बाइट्स
mscorwks.dll JIT_Throw() + 0x130 बाइट्स
MyApp .ni.exe! 000007feee74c84c()
MyApp.ni.exe
0000000070000d5e()
[फ्रेम्स नीचे गलत और/या गुम हो सकता है, कोई प्रतीकों के लिए MyApp.ni.exe लोड]! 000007feee611000()
000000000300bf78()
000000000300bf60()

मॉड्यूल खिड़की इंगित करता है कि प्रतीकों ओएस और नेट DLLs के लिए लोड किए गए हैं, लेकिन आवेदन मॉड्यूल के लिए, मैं इस मिल:

MyApp.exe -> कोई देशी प्रतीकों प्रतीक फ़ाइल में।
MyApp.ni.exe -> कोई मेल खाने वाली बाइनरी नहीं मिली।
MyAppsLibrary.ni.dll -> कोई मिलान बाइनरी नहीं मिला।

+0

हो सकता है कि एक बेवकूफ सवाल है, तो आप अपने ऐप डीबग के साथ परिभाषित संकलन किया था तो यह .pdb फ़ाइलें, बनाने होगा? –

+0

स्टैक ओवरफ़्लो से यह प्रश्न ब्याज का हो सकता है। http://stackoverflow.com/questions/850617/how-to-extract-debugging-information-from-a-crash –

+0

और यह क्रैश डीबगिंग के लिए एक प्रारंभिक प्रारंभ अनुभाग है। http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a –

उत्तर

3

उन डंपों को डीबग करने का सबसे आसान तरीका विंडोज डिबगर्स (विंडबग, सीडीबी, या एनटीएसडी) के साथ है और एसओएस डीबगर एक्सटेंशन लोड करने के लिए है (आप अधिक जानकारी के लिए एसओएस खोज सकते हैं)।

जहां तक ​​मुझे याद है, एनजीएनएड का हिस्सा एसओएस के लिए कोई फर्क नहीं पड़ता है जब तक कि आपके पास मूल EXE और प्रतीकों (चूंकि यह आपका ऐप है, मैं उम्मीद करता हूं कि आपके पास नॉन एनजेन है ' एड exe और प्रतीकों)।

0

आप के लिए किसी भी मदद के इस है:

पुरुष क्रैश डम्प से अपने आवेदन डिबग करने के लिए कुछ प्रतीकों लोड करने में सक्षम हो रहा है, एक समस्या लोड हो रहा है था सही प्रतीक लेकिन किसी ने अपने प्रश्न का उत्तर दिया।

1

"विंडोज़ के लिए डिबगिंग टूल्स" (विशेष रूप से, WinDBG) में प्रबंधित ऐप्स के लिए सीमित समर्थन है। पीडीबी के साथ, आपको स्रोत लाइन संदर्भ सहित कॉल स्टैक देखने में सक्षम होना चाहिए। वेरिएबल वैल्यू देखने के लिए, आपको एसओएस प्लगइन का उपयोग करना होगा, जो कॉल स्टैक विंडो खोलने के लिए और अधिक कठिन है।

0

चूंकि यह प्रबंधित कोड है, इसलिए आपको फ़ोल्डर्स को इंगित करने के लिए _NT_EXECUTABLE_IMAGE_PATH पर्यावरण चर सेट करने की आवश्यकता हो सकती है जहां आपके एक्जिक्यूटिव लाइव रहते हैं। इस मामले में, आपको मूल छवि कैश में फ़ोल्डर का पता लगाने की आवश्यकता होगी जो आपके असेंबली को इंगित करता है। असेंबली को लोड करने के लिए डीबगर को छवियों की आवश्यकता होती है।

1

यदि आप क्लाइंट को फिर से अपना ऐप चलाने के लिए अनुरोध करने में सक्षम हैं, तो उन्हें निम्न पर्यावरण परिवर्तनीय सेट के साथ चलाने के लिए कहें: COMPLUS_ZapDisable = 1 इस प्रकार सीएलआर आपके ऐप को चलाने के दौरान मूल छवियों को लोड नहीं करेगा और आप स्टैक पर प्रतीकों के साथ अपने सामान्य मॉड्यूल देखेंगे।

http://referencesource.microsoft.com/faq.aspx

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