2010-05-11 5 views
11

में अनचाहे अपवादों को कैसे तोड़ें कंसोल में .NET अनुप्रयोगों में, डीबगर किसी मिलान मिलान वाले ब्लॉक के अपवादों के लिए फेंकने के बिंदु (अवांछित ढेर से पहले) पर टूट जाता है। ऐसा लगता है कि सिल्वरलाइट सभी उपयोगकर्ता कोड को कोशिश करने के अंदर चलाता है, इसलिए डीबगर कभी नहीं टूटता है। इसके बजाए, आवेदन। अनचाहे अपवाद उठाया गया है, लेकिन अपवाद को पकड़ने और ढेर को अनदेखा करने के बाद। तोड़ने के लिए जब अनचाहे अपवाद फेंक दिए जाते हैं और कैच नहीं होते हैं, तो मुझे पहले मौका अपवाद ब्रेक सक्षम करना होता है, जो प्रोग्राम को अपवादों के लिए भी रोकता है।सिल्वरलाइट

क्या सिल्वरलाइट प्रयास ब्लॉक को हटाने का कोई तरीका है, ताकि अपवाद सीधे डीबगर पर जाएं?

+1

क्या कोई कारण है कि आप ऐप.एक्सएएमएल में एक अनहैंडेड एक्सेप्शन हैंडलर में तोड़ नहीं सकते हैं और वहां अपवाद की जांच कर सकते हैं? मुझे पता है कि यह आदर्श से कम है लेकिन यह आपको आवश्यक सभी जानकारी देता है। – Stephan

+1

आवेदन। अनचाहे अपवाद उठाया गया है ढेर को अनदेखा करना। आपके पास अपवाद ऑब्जेक्ट में संग्रहीत स्टैक ट्रेस तक पहुंच है, लेकिन फेंकने के समय स्थानीय चर की स्थिति खो जाती है। –

+1

मुझे उम्मीद है [IntelliTrace] (http://social.msdn.microsoft.com/Forums/en/csharpide/thread/82f03aef-ada5-4c3c-a67d-8b66d99a835b) भविष्य में उस अंतिम समस्या को हल करेगा (एसएल 5?) संस्करण। – hemp

उत्तर

5

अपनी वेब प्रोजेक्ट में, सुनिश्चित करें कि सिल्वरलाइट अनुप्रयोगों का डिबगिंग चेकबॉक्स चेक किया गया है। आपको वेब एप्लिकेशन के गुण-> वेब टैब के अंतर्गत सेटिंग मिल जाएगी।

वीएस -2008 में, अपवाद विंडो लाने के लिए Ctrl + Alt + E दबाएं, "सामान्य भाषा रनटाइम अपवाद" के लिए थ्रो कॉलम के नीचे बॉक्स को चेक करें। वीएस -2010 में, मुझे शॉर्टकट काम पर विश्वास नहीं है, इसलिए आपको ड्रॉपडाउन मेनू से डीबग-> अपवादों पर जाना होगा।

मुझे यकीन नहीं है कि यह वही है जो आप खोज रहे हैं, लेकिन उम्मीद है कि यह मदद करता है!

+0

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

4

परेशानी निर्माता DispatcherOperation.Invoke() विधि है। यह इस तरह दिखता है:

internal void Invoke() 
{ 
    try 
    { 
     this._operation.DynamicInvoke(this._args); 
    } 
    catch (Exception exception) 
    { 
     Error.GetXresultForUserException(exception); 
    } 
} 

"सब कुछ को पकड़ने" खंड में कदम से डिबगर से बचाता है सिल्वरलाइट विंडोज फ़ॉर्म ' विधि करने के लिए कुछ इसी तरह याद आ रही है।। और अगर कोई डीबगर चल रहा है, तो कोई जांच नहीं है, कुछ और Winforms करता है।

यह मैं के रूप में बहुत जोड़ने के लिए कठिन हड़ताल नहीं है, मैं तुम्हें connect.microsoft.com

इस बीच में एक सुविधा का अनुरोध पोस्ट की सलाह देते हैं, वहाँ कोई अन्य विकल्प डीबग + अपवाद से उपलब्ध है, टिकटिक अपवाद फेंकने पर रोकने के लिए डीबगर को मजबूर करने के लिए चेकबॉक्स फेंक दिया गया। वास्तव में असाधारण के लिए आरक्षित अपवाद रखें।

1

मैं CTRL + ALT + ई (डीबग> अपवाद) पद्धति का उपयोग जब फेंक दिया तोड़ने के लिए मजबूर करने के लिए डीबगर है, लेकिन मैं एक के रूप में पर कर आवश्यक आधार और जैसा कि मैं कर सकता हूं लक्षित।

यदि मैं अपवाद को ट्रैक करने का प्रयास कर रहा हूं, तो मैं पहली बार ऐप क्रैश होने के बाद आउटपुट विंडो [डीबग] में इसके प्रकार की तलाश करूंगा। फिर मैं उस अपवाद प्रकार के लिए केवल "ब्रेक डाउन" चालू करूंगा, केवल संवाद के दाईं ओर स्थित खोज बटन का उपयोग करके।

यह सही नहीं है, लेकिन यह इसे फ़िल्टर करने के रूप में फ़िल्टर किया गया है।

9

यह वास्तव में काफी आसान है।

Application_UnhandledException event का उपयोग करना आप प्रोग्रामेटिक रूप से inject a breakpoint कर सकते हैं।
 

using System.IO; // FileNotFoundException 
using System.Windows; // Application, StartupEventArgs, ApplicationUnhandledExceptionEventArgs 

namespace SilverlightApplication 
{ 
    public partial class App : Application 
    { 
     public App() 
     { 
      this.Startup += this.Application_Startup; 
      this.UnhandledException += this.Application_UnhandledException; 

      InitializeComponent(); 
     } 

     private void Application_Startup(object sender, StartupEventArgs e) 
     { 
      this.RootVisual = new Page(); 
     } 

     private void Application_UnhandledException(object sender, 
      ApplicationUnhandledExceptionEventArgs e) 
     { 
      if (System.Diagnostics.Debugger.IsAttached) 
      { 
       // Break in the debugger 
       System.Diagnostics.Debugger.Break(); 

       // Recover from the error 
       e.Handled = true; 
       return; 
      } 

      // Allow the Silverlight plug-in to detect and process the exception. 
     } 
    } 
} 
+0

क्षमा करें - मैंने अभी प्रश्न को फिर से पढ़ लिया है और महसूस किया है कि आपने अपनी आवश्यकताओं को पूरा नहीं करते हुए इस दृष्टिकोण को पहले से ही लिखा है। मैं यहां जवाब छोड़ दूंगा, हालांकि, किसी और के रूप में यह उपयोगी हो सकता है। – hemp

+0

+1 सिस्टम के बारे में नहीं पता था। डायग्नोस्टिक्स। डेबगर। आईएसएटेड – luvieere

0

हर ब्राउज़र डिबगिंग सिल्वरलाइट का समर्थन करता है।

उदाहरण के लिए, मैं इसे फ़ायरफ़ॉक्स और न ही क्रोम से डीबग नहीं कर सका, यह केवल आईई में सही ढंग से काम करता था। :(

यदि यह आपका मुद्दा नहीं है, बस इस जवाब क्लिक डिबग आम भाषा क्रम अपवाद के रूप में चिह्नित फेंका ध्यान न दें।

0

, अपवाद चुनते हैं, तो। मैं एक ही समस्या थी और यह मेरे

के लिए समस्या तय