2011-02-19 5 views
6

मेरे पास एक साधारण WinForms ऐप है जिसका परीक्षण परीक्षण मामलों में प्रवेश करने के लिए किया जाता है। जब से मैंने इस एप्लिकेशन को .NET 4.0 में अपग्रेड किया है और XSD स्कीमा के विरुद्ध एक्सएमएल को मान्य करने के लिए टैब पेज नियंत्रण में एक नया टैब पेज जोड़ा है, तो एप्लिकेशन यादृच्छिक रूप से क्रैश हो रहा है। मैं अपवाद को पुन: पेश करने में असमर्थ रहा हूं।Winforms अनुप्रयोग में अनचाहे अपवाद

TestCaseViewer कोई समस्या हुई है और उसे बंद होना होगा:

त्रुटि मेरी क्यूए पुरुष प्राप्त करता जेनेरिक Windows संदेश है। असुविधा के लिए खेद है।

वास्तविक त्रुटि मैं इस कार्यक्रम के मुख्य विधि की शुरुआत करने के लिए निम्न कोड जोड़ दिया है करने के लिए प्राप्त करने की कोशिश करने के लिए:

 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
     Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
     Application.ThreadException += Application_ThreadException; 

ईवेंट हैंडलर्स इस तरह दिखेगा:

static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) 
    { 
     try 
     { 
      MessageBox.Show(e.Exception.ToString(), @"Thread Exception", 
       MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     } 
     finally 
     { 
      Application.Exit();  
     } 
    } 

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
    { 
     try 
     { 
      var ex = (Exception)e.ExceptionObject; 
      MessageBox.Show(ex.ToString(), @"Unhandled Exception", 
       MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     } 
     finally 
     { 
      Application.Exit();  
     } 
    } 

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

क्या कोई मुझे इस अपवाद को फँसाने के बारे में कोई अन्य विचार दे सकता है?

+0

स्टैकट्रेस में निम्नलिखित को जोड़? ** MessageBox.Show (e.Stacktrace); ** –

+0

जब तक स्टैक ट्रेस शून्य नहीं होता है तब तक इसे वापस कर दिया जाएगा जब अपस्टेशन पर ToString() को कॉल किया जाता है। – Loathian

उत्तर

2

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

ऐसा करने के लिए, "डीबग" मेनू से "अपवाद" का चयन करें। आप एक संवाद बॉक्स कि इस तरह दिखता है मिल जाएगा:

    Visual Studio Exceptions dialog

तुम सच में गंभीर प्राप्त करना चाहते हैं, बक्से के सभी जांच कर देखें। फिर, अपने क्यूए लड़के से पता लगाएं कि अपवाद को ट्रिगर करने के लिए वास्तव में क्या किया जा रहा है, और विकास वातावरण के भीतर डीबगर के तहत चलते समय उन कार्यों को ठीक से पुन: उत्पन्न करें। जब भी अपवाद फेंक दिया जाता है, तो विजुअल स्टूडियो टूट जाएगा और आप एक पूर्ण स्टैक ट्रेस के साथ कोड की अपमानजनक रेखा देखेंगे।

+0

मैं वास्तव में उस सेटिंग को अपने आईडीई में चेक किया है। समस्या यह है कि मैं उसी चरण के बाद त्रुटि को पुन: उत्पन्न नहीं कर सकता क्योंकि वह सिर्फ डेटाग्रिड में चारों ओर क्लिक कर रहा है। त्रुटि एक ही पंक्ति में दो बार एक पंक्ति में प्रकट नहीं होती है। मुझे लगता है कि यह ग्रिड में डाटाबेसिंग वायरअप या कोड हैंडलिंग स्थिति में कुछ बुरा है। – Loathian

+0

@ लोथियन: यह परीक्षक आपकी कंपनी में है? उसे अपने कंप्यूटर पर लाओ और उसे बग का पुनरुत्पादन करें। मुझे यकीन नहीं है कि आप किस प्रकार का उत्तर यहां खोज रहे हैं। यह एक बग को ठीक करना असंभव है जिसके लिए आप repro नहीं कर सकते हैं। प्रत्येक बग डेटाबेस में उस कारण के लिए "नो रेपो" के रूप में बग को बंद करने का विकल्प होता है। हालात अलग-अलग हो सकते हैं यदि यह एक विशेष स्थान के साथ एक दूरस्थ स्थान पर एक ग्राहक था, लेकिन यदि आप इसे अपने स्वयं के क्यूए विभाग की मदद से पुन: पेश नहीं कर सकते हैं, तो मुझे संदेह है कि यहां कोई भी आपकी मदद कर सकता है। –

+0

यह मेरी अपनी कंपनी में एक परीक्षक है, वास्तव में मेरे पास से सीधे बैठता है। यदि वह फिर से त्रुटि बना सकता है तो मैं उसे कुछ डिबगिंग टूल के साथ कैप्चर करने जा रहा हूं ताकि यह देखने के लिए कि क्या हम उस तरह के स्टैक ट्रेस प्राप्त कर सकते हैं।मैं वास्तव में किसी को अपनी अपवाद हैंडलिंग कोड की समीक्षा करने के लिए देख रहा था यह देखने के लिए कि क्या मैंने कोई गलती की है या नहीं। – Loathian

9

कोशिश अपने app.config

<runtime> 
    <!-- the following setting prevents the host from closing when an unhandled exception is thrown --> 
    <legacyUnhandledExceptionPolicy enabled="1" /> 
</runtime> 
+1

यह मेरे लिए काम करता है, धन्यवाद! –

+8

मुझे नहीं पता कि यह क्या करता है, लेकिन यह * बहुत * संदिग्ध लगता है। आपको किसी भी अज्ञात स्थिति में अंधेरे पर अपने प्रोग्राम को सैनिक के लिए मजबूर करने के लिए पीठ पर खुद को पेट करने की कठोर समस्या को ठीक करने की आवश्यकता नहीं है। –

+0

@EvanHarper कभी-कभी हमें अपने सॉफ़्टवेयर को मारने की आवश्यकता होती है .. – aswzen