2010-12-12 8 views
5

मैं अपने आवेदन पर एक साधारण क्रैश रिपोर्ट को लागू करने की सोच रहा हूं जो उपयोगकर्ता से पूछेगा कि वह हमें क्रैश लॉग भेजना चाहता है या नहीं।सरल क्रैश रिपोर्ट?

मैंने पहले कभी एक क्रैश रिपोर्ट नहीं की, जो मुझे करने के लिए उपयोग किया जाता है वह लॉग फ़ाइल में त्रुटियों को सहेजने के लिए प्रयास/पकड़ है।

  1. क्रैश रिपोर्ट सिस्टम को लागू करने का सही तरीका क्या है?

  2. आप क्रैश रिपोर्ट को कैसे खोलते हैं और डंप भेजते हैं जब एप्लिकेशन क्रैश हो जाता है या डेटा भेजने के लिए सही दृष्टिकोण क्या होता है?

मुझे लगता है कि इसके बाद के संस्करण यह कैसे काम करता है के रूप में मेरा सबसे बड़ा संदेह कर रहे हैं या काम करना चाहिए ... मैं पूरी तरह से यकीन है कि अगर क्रैश रिपोर्ट ट्राई/catchs के परस्पर प्रभाव एक बाहरी अनुप्रयोग के साथ trigged जब होगा नहीं कर रहा हूँ उपर्युक्त होता है या इसका पालन करने का सही तरीका क्या होगा।

मेरे पास SQL ​​सर्वर उपलब्ध नहीं है, इसलिए मैं जो उपयोग करने की योजना बना रहा था वह एक साधारण अपलोड स्क्रिप्ट होगी जो डंप की रिपोर्ट करने वाला ऐप डेटा भेजने के लिए उपयोग करेगा।

क्रैश रिपोर्ट कैसे काम करती है और मुझे उम्मीद है कि समुदाय इसे बेहतर समझने में मेरी सहायता कर सकता है।

मैं क्रैश रिपोर्ट के बारे में चारों ओर खोज रहा था और अधिकांश चीजें क्रिस्टल रिपोर्ट के आसपास जा रही थीं, लाइब्रेरी जाने के लिए तैयार थीं, लेकिन मैं इसे छोटा शुरू करना चाहता हूं इसलिए मुझे कुछ बड़ी लाइब्रेरी में खोदने से पहले इसकी बेहतर समझ मिल सकती है या अन्य समाधान अगर यह मेरे अंत में उपलब्ध है।

उत्तर

3

बहुत आवेदन पर निर्भर करता है और (विशेष रूप से) अपने उपयोगकर्ताओं के प्रत्याशित गोपनीयता की चिंताओं।

मान लीजिए कि यह एक क्लाइंट एप्लिकेशन है जो उपयोगकर्ताओं के पीसी पर चल रहा है, यदि यह एक "इंट्रानेट" आंतरिक अनुप्रयोग है तो एप्लिकेशन को बाहर निकलने के बाद एप्लिकेशन को लॉग फ़ाइल ईमेल करना बहुत आसान होना चाहिए।

यह काफी मजेदार हो सकता है, क्योंकि कभी-कभी उपयोगकर्ता इसे रिपोर्ट करने के लिए आसपास आने से पहले बग ठीक कर देंगे।

वैकल्पिक रूप से, अगर आप और चिंतित है कि आवेदन क्रैश हो सकता है कर रहे हैं बिना क्रिया का अपवाद ठीक से पकड़ नहीं किया जाएगा, आप

  1. स्टार्टअप पर, एक रजिस्ट्री प्रविष्टि (या डमी फ़ाइल प्रविष्टि, या क्या लिख ​​सकता है -वैसे-आप) "अंक ठीक से समाप्त नहीं हुआ"
  2. एक साफ निकास पर, रजिस्ट्री प्रविष्टि (या क्या है-आप)
  3. स्टार्टअप पर, रजिस्ट्री प्रविष्टि (आदि) को देखने के लिए जांचें।) मौजूद।

यदि मार्कर मौजूद है, तो आप जानते हैं कि एप्लिकेशन एक गैर-साफ फैशन में क्रैश हो गया है, ताकि आप उपयोगकर्ता को टेक्स्ट के साथ संकेत दे सकें। "पिछली बार जब आप इस कार्यक्रम को चलाते थे तो यह ठीक से बाहर निकलने के लिए प्रतीत नहीं होता था। क्या आप हमारे साथ क्या हुआ एक लॉग भेजना चाहते हैं ताकि हम किसी भी समस्या का सामना कर सकें और ठीक कर सकें?"

+0

+1। मैं उपयोगकर्ताओं की जानकारी एकत्र नहीं करना चाहता क्योंकि यह सब कुछ काम कर रहा है, यह है कि यह क्रैश होने पर मुझे दुर्घटना की रिपोर्ट भेजता है और ऐसा करने से पहले यह उपयोगकर्ता से पूछेगा कि वे ऐसा करना चाहते हैं या नहीं। आपका दूसरा बिंदु एक विचार की तरह लगता है जो कि मेरे लिए काम पर काम करेगा।लेकिन क्या होगा यदि कार्यक्रम उपयोगकर्ता के लिए एन कारण के लिए भी शुरू नहीं करता है जिसे संभाला नहीं जा रहा है और मुझे इसकी जांच करने के लिए एक क्रैश रिपोर्ट की आवश्यकता है? – Prix

+0

मिच जवाब अच्छा था लेकिन Winqual मेरे लिए लागू नहीं होता है और दूसरा लिंक कभी काम नहीं करता है, इसके अलावा यह जवाब मुझे बेहतर बनाता है क्योंकि मुझे कोई अन्य जवाब नहीं मिला है जो वास्तव में मेरे प्रश्न का समाधान करता है, इसलिए मैं इसे अपने उत्तर के रूप में देखूंगा। – Prix

+1

वह दृष्टिकोण केवल यह जानने के लिए काम करता है कि एप्लिकेशन क्रैश हो गया है या नहीं, है ना? अगर मैं अपवाद भी भेजना चाहता हूं तो क्या होगा? फ़ायरफ़ॉक्स की तरह कम या ज्यादा। – Jack

1

कोशिश AppDomain.UnHandledException और/या AppDomain.ThreadException

+0

इस एक के आधार पर क्रैश रिपोर्ट पुस्तकालय हो रही द्वारा अपने समय बचा सकते हैं मैं कैसे यह उत्तर के लिए धन्यवाद काम करता है देखने के लिए इसके बारे में अधिक पढ़ा जाएगा। – Prix

6

उपयोग करने के लिए आप का उपयोग कर विचार किया है निर्मित Windows Error Reporting?

आप , आवेदन विशेष अपने संगठन के साथ जुड़े प्रणाली विशिष्ट त्रुटियों ऑपरेटिंग चालक विशिष्ट देखने के लिए, या करने के लिए उपयोग कर सकते हैं Winqual वेबसाइट। प्रत्येक त्रुटि रिपोर्ट उस बाल्टी से संबंधित विवरण प्रदान करती है, और फिर आप संबंधित डेटा की फ़ाइल का अनुरोध कर सकते हैं।

त्रुटि रिपोर्ट देखने के लिए:

  1. एक Winqual खाता स्थापित करना। कंपनियों को प्रतिरूपण से बचाने के लिए और यह सुनिश्चित करने के लिए कि त्रुटि रिपोर्ट सही कंपनी के प्रतिनिधि के पास जाएं, Winqual वेबसाइट आपकी कंपनी को वैध वेरीसिगन आईडी की आवश्यकता है।

• अपने कानूनी विभाग से जांचें; आपकी कंपनी के पास पहले से वेरीसिगन आईडी (जिसे प्रमाणीकरण के लिए प्रकाशक डिजिटल आईडी भी कहा जा सकता है)। • यह देखने के लिए कि आपकी कंपनी के पास पहले से खाता है या नहीं, Winqual पर जांचें।

  1. विंडोज त्रुटि रिपोर्टिंग अनुबंध स्वीकार करें।

  2. Winqual साइट पर साइन इन करें।

  3. विंडोज त्रुटि रिपोर्ट पर क्लिक करें।

यह पुराने लेख रुचि का हो सकता: A Simple Class to Catch Unhandled Exceptions in WinForms

+0

विनक्वल शांत है, लेकिन यह प्रबंधित प्रोग्राम के लिए बहुत मदद नहीं करता है, है ना? मुझे याद है कि यह ज्यादातर देशी कोड लक्षित है, प्रबंधित नहीं है। –

+0

'अंतर्निहित विंडोज त्रुटि रिपोर्टिंग' के बारे में यह दिलचस्प लगता है लेकिन यह एक व्यक्तिगत एप्लिकेशन है जो किसी संगठन/कंपनी से नहीं है, फिर भी यह व्यक्तिगत उपयोग के लिए संभव होगा? – Prix

+0

दूसरे लिंक के संबंध में ऐसा लगता है कि मैं उस क्षण में क्या करने की कोशिश कर रहा हूं, मैं इसे बहुत धन्यवाद देता हूं। – Prix

4

अपने स्वयं के अपवाद हैंडलर को रोल करें। अपने प्रोग्राम.cs कक्षा में नीचे कोड का प्रयोग करें। अपवाद होने पर यह स्वचालित रूप से मेल भेज देगा।

using System; 
using System.Windows.Forms; 
using System.Net; 
using System.Net.Mail; 
using System.Threading; 

namespace ExceptionHandlerTest 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      Application.ThreadException += 
       new ThreadExceptionEventHandler(Application_ThreadException); 

      // Your designer generated commands. 
     } 

     static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) 
     { 

      var fromAddress = new MailAddress("your Gmail address", "Your name"); 
      var toAddress = new MailAddress("email address where you want to receive reports", "Your name"); 
      const string fromPassword = "your password"; 
      const string subject = "exception report"; 
      Exception exception = e.Exception; 
      string body = exception.Message + "\n" + exception.Data + "\n" + exception.StackTrace + "\n" + exception.Source; 

      var smtp = new SmtpClient 
      { 
       Host = "smtp.gmail.com", 
       Port = 587, 
       EnableSsl = true, 
       DeliveryMethod = SmtpDeliveryMethod.Network, 
       UseDefaultCredentials = false, 
       Credentials = new NetworkCredential(fromAddress.Address, fromPassword) 
      }; 
      using (var message = new MailMessage(fromAddress, toAddress) 
      { 
       Subject = subject, 
       Body = body 
      }) 
      { 
       //You can also use SendAsync method instead of Send so your application begin invoking instead of waiting for send mail to complete. SendAsync(MailMessage, Object) :- Sends the specified e-mail message to an SMTP server for delivery. This method does not block the calling thread and allows the caller to pass an object to the method that is invoked when the operation completes. 
       smtp.Send(message); 
      } 
     } 
    } 
} 

आप से https://crashreporterdotnet.codeplex.com

+0

वह पुस्तकालय बहुत अच्छा है! धन्यवाद! – Jack