2009-07-25 16 views
6

यदि कोई अपवाद मेरे आवेदन के शीर्ष तक सभी तरह से प्रचारित करता है (जो, निश्चित रूप से, कभी नहीं होगा), मैं एक त्रुटि भेजने का विकल्प देना चाहता हूं कार्यक्रम दुर्घटनाग्रस्त होने से पहले मुझे रिपोर्ट करें। मेरे मन में जो कुछ है, वह मुख्य कार्य में सब कुछ लपेट रहा है, और एक छोटी सी कक्षा जो स्टैक ट्रेस और अन्य जानकारी को मेरे सर्वर पर भेजती है। यह काफी आसान लगता है, लेकिन इस तरह के कुछ के साथ मुझे यकीन है कि बाधाएं हैं (जैसे सुरक्षा, भावी-प्रमाणन) जिसे मैंने पूरी तरह से नहीं माना है।.NET "त्रुटि रिपोर्ट [मुझे]"

क्या इस उद्देश्य के लिए कोई मौजूदा .NET लाइब्रेरी/प्रोजेक्ट है? या वैकल्पिक रूप से, क्या यह सही दृष्टिकोण की तरह लगता है, बस एप्लिकेशन के प्रवेश बिंदु में सभी अपवाद को पकड़ रहा है?

+0

आप अभी भी अन्य धागे :) – cwap

+0

और यह भी वहाँ uncatchable excpetions हैं द्वारा फेंका अपवाद को पकड़ने एक समस्या है चाहते हैं; यानी StackOverflowException;) – Wilhelm

+0

"यदि कोई अपवाद मेरे आवेदन के शीर्ष तक सभी तरह से प्रचारित करता है (जो, ज़ाहिर है, कभी नहीं होगा) ..." आप हमें एक मजाकिया चेहरा जोड़ना भूल गए हैं ताकि आप जान सकें कि आप मजाक कर रहे हैं। :) यह कहना बेहद जबरदस्त नहीं है कि सभी ऐप्स क्रैश हो जाते हैं। –

उत्तर

4

.NET में सभी उपलब्ध लॉगिंग ढांचे पर this question देखें, उनमें से किसी को ईमेल अधिसूचना प्रदान करनी चाहिए।

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

FogBugz में त्रुटि रिपोर्टिंग सुविधा पर old article from Joel है, शायद यह आपको कुछ और विचार देगा। (मुझे लगता है कि मैंने इसे अपने ब्लॉग पर पढ़ा है, लेकिन मुझे यह सब मिल सकता है यह पृष्ठ फोगबगज़ प्रलेखन है)।

+0

वह लिंक अब मान्य नहीं है। मैं निम्नलिखित ओपन सोर्स प्रोजेक्ट पर काम करता हूं जो अपवादों पर एकत्रित करने और रिपोर्ट करने पर एक शानदार काम करता है (https://github.com/exceptionless/Exceptionless) –

2

आप Enterprise Library से आसानी से ईमेल भेज सकते हैं जब आप अपवादों को पकड़ते हैं और लॉग करते हैं। create a last chance exception handler पर कुछ जानकारी यहां दी गई है। मैंने माना है कि आपके पास एक विनफॉर्म एप्लिकेशन है, लेकिन यह आपके प्रश्न से स्पष्ट नहीं है।

1

विंडोज़ का उपयोग करने वाले वही टूल का उपयोग करें: Windows Error Reporting (WER)। यह क्रैश विश्लेषण करेगा और आपके दुर्घटनाओं को बाल्टीकृत करेगा ताकि आप समझ सकें कि सबसे आम कौन सा है। कोई कोड परिवर्तन आवश्यक नहीं है, यह प्रक्रिया स्तर पर काम करता है। यह अपवादों से असफलताओं को लॉग करेगा जो आप नहीं पकड़ सकते हैं।

सभी मानते हैं कि आप विंडोज़ पर चल रहे हैं।

+0

क्या आप ओपी को त्रुटि रिपोर्ट भेज देंगे? –

+1

यकीन नहीं है कि ओपी का क्या मतलब है। WER त्रुटि रिपोर्ट को माइक्रोसॉफ्ट को भेजता है जहां वे संग्रहीत होते हैं। डेवलपर समय-समय पर विश्लेषण के लिए उन्हें पुनर्प्राप्त कर सकता है। एक आवश्यकता यह है कि डेवलपर माइक्रोसॉफ्ट के साथ पंजीकृत है और कई सैकड़ों डॉलर की लागत पर अपने कोड की पहचान करने के लिए डिजिटल हस्ताक्षर प्रदान करता है। यहां और अधिक: http://en.wikipedia.org/wiki/Windows_Error_Reporting – urig

+0

मूल पोस्टर। –

1

मेरा मानक अस्वीकरण: मैं इस उत्पाद पर एक डेवलपर हूं।

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

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

इस कार्यक्षमता का एक मूल संस्करण विजुअल स्टूडियो 2010 में शामिल किया जाना चाहिए और साथ ही साथ एक मुफ्त डेटा रिपोर्टिंग पोर्टल तक पहुंच (लेकिन कोई एसएलए, डेटा प्रतिधारण गारंटी या डेटा गोपनीयता के साथ) शामिल नहीं है।

उपयोग जानकारी के साथ मनमाने ढंग से डेटा भेजने की क्षमता वाणिज्यिक उत्पाद तक ही सीमित है, लेकिन आप पूरी तरह से कार्यात्मक, खाली समय सीमित मूल्यांकन संस्करण के लिए प्रीपेक्टिव सॉल्यूशंस से संपर्क कर सकते हैं।

आप नीचे दिए गए नमूना कोड के साथ रिपोर्टिंग त्रुटि को पूरा कर सकते हैं:

public partial class app : Application { 
// field to temporarily store exception data   
    private Exception exp; 
    void AppStartup(object sender, StartupEventArgs args) { 
     // add a handler to catch any unhandled exceptions  
     this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(ErrorHandler); 
     Window1 mainWindow = new Window1(); 
     mainWindow.ShowDialog(); 
    } 

    // this will prompt the user if they want to report the exception 
    void ErrorHandler(object sender, DispatcherUnhandledExceptionEventArgs e) { 
     this.exp = e.Exception; 
     if (MessageBox.Show("A " + exp.Message + " exception happened, should I report it?", "Error Occurrend", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { 
      ErrorHappened(); 
      e.Handled = true; 
     } 
    } 

    // this method is called by the above ErrorHandler method and when run through Dotfuscator additional code will be injected into this method that will send a usage data message back to the server and the data in the dictionary (which will be exception data) returned by the ErrorData method will be included into the message and be stored and reported on the server 
    [Feature("Exception", EventType = FeatureEventTypes.Tick, ExtendedKeySourceElement = SourceElements.Method, ExtendedKeySourceName = "ErrorData")] 
    private void ErrorHappened() { 
     // This is here as a placeholder for the exception feature attribute which will exit the application when executed 
     AppShutdown(true); 
    } 

    // this method takes the exception data from the exp field and returns it as a dictionary of name/value pairs 
    public Dictionary<string, string> ErrorData() { 
     var retval = new Dictionary<string,string>(); 
     if (null != exp) { 
      retval.Add("Error Message",exp.Message); 
      retval.Add("Stack Trace",exp.StackTrace); 
     } 
     return retval; 
    } 
} 
1

मैं संशोधित जेफ के User-Friendly Exception Handler और .NET 2.0/3 के लिए यह अपडेट किया गया।5, और मुझे इसके साथ बहुत अच्छा भाग्य मिला है। यदि कोई अपवाद स्टैक को अनचाहे तरीके से बनाता है, तो एक स्क्रीनशॉट लिया जाता है और देव टीम को विस्तृत स्टैक ट्रेस के साथ ईमेल किया जाता है।

0

यदि आप एएसपी.नेट आवेदन पर काम कर रहे हैं तो आप एएसपी.नेट स्वास्थ्य निगरानी सुविधाओं का भी उपयोग कर सकते हैं। कॉन्फ़िगरेशन फ़ाइल में कुछ पंक्तियां जोड़ना शामिल है और आप बंद हैं। http://msdn.microsoft.com/en-us/library/bb398933.aspx

1

मैं ओपन सोर्स प्रोजेक्ट पर काम करता हूं अपवादहीन जिसमें क्लाइंट लाइब्रेरीज़ हैं जो बस ऐसा करते हैं! हम सभी अनचाहे अपवादों को पकड़ते हैं और उन्हें एक अतिरिक्त एपीआई भेजते हैं और फिर उन्हें वास्तविक समय में संसाधित करते हैं।

https://github.com/exceptionless/Exceptionless

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