2010-06-09 13 views
5

मेरा एप्लिकेशन क्यूए पर्यावरण में अमान्य कैस्टएक्सप्शन फेंकता है, जिसे मैं विकास में पुन: उत्पन्न नहीं कर सकता।एक .NET प्रक्रिया के मिनीडम्प को कैसे बनाएँ जब एक निश्चित पहला मौका अपवाद होता है

मैं अपवाद पल में मिनीडम्प प्राप्त करना चाहता हूं। मुझे एडप्लस के बारे में पता है, लेकिन मुझे यकीन नहीं है कि इसका उपयोग कैसे किया जाए ताकि जब यह अमान्यकास्ट एक्सेप्शन फेंक दिया जाता है तो यह मिनीडम्प बनाता है। जाहिर है, यह किसी दूसरे से .NET अपवाद को अलग नहीं करता है। हो सकता है कि मैं गलत हूं और एक रास्ता है। या, ऐसा करने के लिए एक और उपकरण है। अधिमानतः मुफ्त एक।

वैसे भी, क्या कोई सलाह दे सकता है कि इस मुद्दे को कैसे संभाला जाए?

धन्यवाद।

अद्यतन

  1. निर्माण दोनों क्यूए और देव में एक डीबग बिल्ड है। हालांकि, क्यूए प्रयोगशाला में संभव जटिल परिदृश्य चलाता है, जो देव पुन: पेश नहीं कर सकते हैं। इसलिए मुझे क्यूए में चलते समय डंप करने की क्षमता चाहिए।
  2. मैं कोड को संशोधित कर सकता हूं और कोड से मिनीडम्प बना सकता हूं। हालांकि, मैं एक और अधिक लचीला समाधान की कामना करता हूं, किसी को इस तरह की कोई समस्या होने पर कोड को संशोधित करने की आवश्यकता नहीं होती है।

अद्यतन 2

वास्तव में, मैं "चुरा" है से मिनीडम्प पीढ़ी कोड जॉन रॉबिंस SuperAssert.Net फिर, यह निश्चित ठोस बिंदु से मिनीडम्प पैदा करने के लिए कोड है, जबकि मैं एक और अधिक लचीला की जरूरत है, एडप्लस की शैली में दृष्टिकोण। जॉन रॉबिन्स का दृष्टिकोण एक सीडीबी स्क्रिप्ट तैयार करता है और फिर उस स्क्रिप्ट के साथ सीडीबी डीबगर को प्रक्रिया में संलग्न करने और डंप बनाने के लिए आमंत्रित करता है। यह MiniDumpWriteDump API का उपयोग नहीं करता है।

+0

- आप कोड की लाइन की क्या ज़रूरत है जहां डाली हो रहा है?क्यूए पर्यावरण 'डीबग' मोड की बजाय 'रिलीज' मोड में संकलित है? – Paddy

+0

क्यूए पर्यावरण जहां तक ​​निर्माण का संबंध है, देव के समान ही है। क्या मायने रखता है कि क्यूए पर्यावरण वितरित किया जाता है, जबकि देव एक ही मशीन पर सब कुछ चला रहे हैं। – mark

उत्तर

5

सबसे आसान तरीका यह है कि इसे ऐप से बाहर निकलने दें, उपयोगकर्ता को इसे माइक्रोसॉफ्ट को रिपोर्ट करने दें, और विंडोज त्रुटि रिपोर्टिंग में दाखिला लें।

वैकल्पिक रूप से, आप इसे जॉन रॉबिन्स 'सुपरएसरर्ट .NET (या उसके कोड का सबसेट) का उपयोग करके हाथ से पकड़ सकते हैं।

अद्यतन (गैर कोड समाधान के लिए): सिस्टम आंतरिक 'ProcDump पर एक नज़र डालें।

+0

बात यह है कि मुझे एक गैर-इंटरैक्टिव समाधान की आवश्यकता है और मुझे अब इसकी आवश्यकता है। – mark

+0

फिर मेरे दूसरे समाधान पर विचार करें। वर्तमान में चल रही प्रक्रिया का एक मिनीडम्प लेना तुच्छ नहीं है, इसलिए मैं आपको सलाह देता हूं कि आप केवल जॉन रॉबिन्स कोड का उपयोग करें। –

+0

असल में, मैंने जॉन रॉबिन्स SuperAssert.Net से मिनीडम्प पीढ़ी कोड "चोरी" किया है, फिर से, यह कुछ ठोस बिंदु से मिनीडम्प उत्पन्न करने के लिए कोड है, जबकि मुझे adplus – mark

2

यह संभव है, आपको अपने एडीप्लस स्क्रिप्ट में sos.dll को लोड करना होगा। यह blog post आपको दिखाता है कि कैसे।

एक मिनीडम्प से प्रबंधित कोड डीबग करने की संदिग्ध खुशी से सावधान रहें। यदि आप अभी भी क्यूए में होने के बावजूद कठोर-निदान अपवादों में भाग ले रहे हैं, तो जब आप उत्पादन में जाते हैं तो आप इसे फिर से चलाएंगे। ड्रैगन श्वास आग के साथ जोड़ा गया। AppDomain.UnhandledException के लिए इवेंट हैंडलर लिखकर अच्छे अनचाहे अपवाद लॉगिंग का ख्याल रखें। लॉगिंग e.ExceptionObject.ToString() जानकारी का एक धन देता है।

3

क्या आप शायद अपने सी # आवेदन में MiniDumpWriteDump एपीआई का उपयोग करना चाहते हैं? कोड उदाहरण के लिए http://blog.kalmbach-software.de/2008/12/13/writing-minidumps-in-c/ पर देखें या MiniDumpWriteDump और सी # के लिए इंटरनेट में खोजें।

आप दृश्य स्टूडियो 2010 का उपयोग करते हैं आप मिनीडम्प दृश्य स्टूडियो में प्रत्यक्ष लोड कर सकते हैं एक त्वरित सवाल (http://msdn.microsoft.com/en-us/library/d5zhxt22(v=VS.100).aspx देखें)

+0

के लिए +1 प्रश्न के आधार पर मैं कोड से मिनीडम्प कैसे बना सकता हूं। – mark

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