.NET

2010-02-04 8 views
5

में कठोर अनुप्रयोग aborts हैंडलिंग मुझे पता है कि मैं खुद को यह पूछकर शाही फ्लेमिंग के लिए खोल रहा हूं, लेकिन मैंने सोचा कि मैं देखता हूं कि क्या मुझे लगता है कि स्टैक ओवरफ्लो के पास किसी समस्या का कोई समाधान है ....NET

मेरे पास एक सी # एप्लिकेशन है जो एक क्लाइंट साइट पर असफल रहा है जिससे मैं स्थानीय रूप से पुन: उत्पन्न करने में असमर्थ हूं। दुर्भाग्यवश, मेरे लिए कोई भी जानकारी प्राप्त करना बहुत मुश्किल (असंभव) है जो समस्या के स्रोत को अलग करने में मदद करता है।

मैं जगह में एक नहीं बल्कि व्यापक त्रुटि निगरानी ढांचे के सभी सामान्य स्थानों में बिना क्रिया अपवाद के लिए देख रहा है है:

  • Backstop धागे मैं WinForms अपवाद के लिए नियंत्रित करने
  • Application.ThreadException में अपवाद संचालक
  • AppDomain.CurrentDomain.UnhandledException

कौन सा स्थान उन स्थानों तक विस्तृत जानकारी देता है जहां मेरे पास पहुंच है।

उत्पादन कोड में मुद्दों की पहचान करने के लिए अतीत में यह बहुत उपयोगी रहा है, लेकिन मुझे मौजूदा मुद्दों की श्रृंखला के बारे में कोई जानकारी नहीं दे रही है।

मेरा सबसे अच्छा अनुमान यह है कि मुख्य मुद्दा "कठोर" अपवाद प्रकारों में से एक है (थ्रेड अपरेट, मेमोरी से बाहर, स्टैक ओवरफ़्लो, एक्सेस उल्लंघन इत्यादि) जो कि एक कठोर शट डाउन पर चढ़ रहे हैं जो नीचे गिर रहे हैं इससे पहले कि मुझे क्या हो रहा है यह देखने का मौका मिलने से पहले प्रक्रिया करें।

क्या कोई ऐसी चीज है जिसे मैं स्नैपशॉट जानकारी के लिए कर सकता हूं क्योंकि मेरी प्रक्रिया क्रैश हो रही है जो उपयोगी होगी? आदर्श रूप में, मैं अपना कस्टम लॉग प्रारूप लिखने में सक्षम हूं, लेकिन अगर मैं यह सुनिश्चित करने का एक विश्वसनीय तरीका प्राप्त कर सकता हूं कि क्रैश डंप कहीं लिखा गया है तो मुझे खुशी होगी।

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

मैं कोड हस्ताक्षर प्रमाणपत्र की कमी के कारण विंडोज त्रुटि रिपोर्टिंग और दोस्तों का उपयोग करने में असमर्थ हूं।

मैं मनमाने ढंग से अपवादों से "पुनर्प्राप्त" करने की कोशिश नहीं कर रहा हूं, मैं बस इस बात पर ध्यान देने की कोशिश कर रहा हूं कि रास्ते में क्या गलत हुआ।

कोई विचार?

+2

यह एक अच्छी बात है सवाल। फ्लेमिंग मुख्य रूप से जेनेरिक 'ट्राई-कैच-प्रीटेन्ड-इट्स-ओके' कोड की ओर निर्देशित होती है। गहन शटडाउन और त्रुटि रिपोर्टिंग वैश्विक अपवाद हैंडलर पंजीकृत करने के लिए पूरी तरह से स्वीकार्य कारण हैं। – Aaronaught

उत्तर

1

आप minidump फ़ाइल बनाने का प्रयास कर सकते हैं। यह एक सी ++ एपीआई है, लेकिन एक छोटे सी ++ प्रोग्राम को लिखना संभव होना चाहिए जो आपके एप्लिकेशन को प्रक्रिया में हैंडल रखता है, प्रक्रिया संभाल पर इंतजार करता है, और उसके बाद एप्लिकेशन मरने पर मिनीडम्प बनाने के लिए प्रक्रिया संभाल का उपयोग करता है।

1

आप किया है, तो आप क्या दावा:

  • आवेदन पर की कोशिश-पकड़ने।भागो
  • बिना क्रिया के डोमेन अपवाद
  • बिना क्रिया धागा अपवाद
  • सभी धागे में
  • कोशिश पकड़ने संचालकों

तो फिर तुम सिवाय शायद अपवाद पकड़ा है | अगर यह एक तीसरी पार्टी या द्वारा फेंका जा रहा है COM घटक।

आपने निश्चित रूप से पर्याप्त जानकारी नहीं दी है।

  • ग्राहक क्या कहता है अपवाद तक जाता है?
  • आप किस COM या तृतीय पक्ष घटक का उपयोग करते हैं? (क्या आप सही ढंग से उदाहरण देते हैं और इन घटकों का संदर्भ देते हैं? क्या आप COM फ़ंक्शन कॉल के लिए वैध तर्क पास करते हैं?)
  • क्या आप किसी भी गैर-प्रबंधित - गैर-सुरक्षित कोड का उपयोग करते हैं?
  • क्या आप सकारात्मक हैं कि आपके पास ट्राई-कैच के साथ सभी फेंकने योग्य कॉल शामिल हैं?

मैं बस इतना कह रहा हूं कि कोई भी आपको कोई सहायक सलाह नहीं दे सकता है जब तक कि आप बहुत अधिक जानकारी का एक बिल्ली पोस्ट न करें और यहां तक ​​कि हम शायद आपको केवल समस्या के स्रोत के रूप में अनुमान लगा सकें।

ताजा आंखों का एक सेट अपने कोड को देखो।

कुछ त्रुटियों को लॉगिंग द्वारा पकड़ा नहीं जा सकता है।

StackOverflowException in .NET

यहाँ एक लिंक अतुल्यकालिक अपवाद समझा है (और आप उन लोगों से क्यों वापस नहीं ले पाता):

अधिक जानकारी के लिए इस समान प्रश्न देखें

http://www.bluebytesoftware.com/blog/PermaLink.aspx?guid=c1898a31-a0aa-40af-871c-7847d98f1641

+0

अपवादों का एक जादू सेट है जिसे प्रबंधित कोड द्वारा पकड़ा नहीं जा सकता है। (जैसे StackOverflowException)। यह कोड: सिस्टम का उपयोग; कक्षा सी { स्थिर शून्य मुख्य() { कोशिश करें {f(); } पकड़ (अपवाद पूर्व) {कंसोल। राइटलाइन (पूर्व); } } स्थैतिक शून्य एफ() {एफ();} } स्टैक ओवरफ़्लो नहीं पकड़ेगा, लेकिन ऐप केवल समाप्त हो जाएगा। – StarBright

+0

@StarBright - हाँ, यही कारण है कि आपको अपने कोड की समीक्षा करने की आवश्यकता है, या, अधिमानतः, किसी और की समीक्षा करें। –

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