2013-03-07 6 views
5

में फेंकने वाले अपवादों को चुनिंदा अनदेखा करें मेरे पास सी # कोड में एक फ़ंक्शन है जहां एक NullReferenceException समय-समय पर (अपेक्षित व्यवहार) फेंक दिया जाता है, लेकिन पकड़ा जाता है। क्या मेरे पास इस कोड के इस विशेष खंड के लिए इस अपवाद को तोड़ने के लिए विजुअल स्टूडियो डीबगर नहीं बता सकता है?सी # कोड

EDIT मुझे अपने कोड में कहीं और इस अपवाद को तोड़ने की ज़रूरत है, लेकिन एक ही कार्य में नहीं।

+4

एक अच्छा तरीका यह ऐसा करने की अनुमति नहीं है क्या करना है। आप इसे रोकने में सक्षम क्यों नहीं हैं? –

+1

यह बाहरी नियंत्रण हो सकता है उसके नियंत्रण के बाहर – Pondidum

+1

ऐसा नहीं है कि मैं सक्षम नहीं हूं, यह कोड मैं विरासत में मिला हूं और मैं इसे तब तक छूने की कोशिश नहीं कर रहा हूं जब तक कि मैं इसे खराब करने वाली कुछ बग ठीक नहीं करता। असल में मेरे पास कुछ त्वरित सुधार हैं जो मुझे जाने से पहले और कुछ भी लिखने से पहले ग्राहकों से बाहर निकलने की ज़रूरत है। –

उत्तर

11

यदि मैं सही ढंग से समझता हूं और आप क्या करने की कोशिश कर रहे हैं तो कुछ NullReferenceException (ओं) को डीबग करना है, लेकिन डीबगिंग के दौरान अस्थायी रूप से दूसरों को अनदेखा करना चाहते हैं, तो आप उन कार्यों को चिह्नित करके ऐसा करने में सक्षम हो सकते हैं जिन्हें आप डीबगर को अनदेखा करना चाहते हैं DebuggerNonUserCode विशेषता।

[DebuggerNonUserCode] 
private void MyMethod() 
{ 
    // NullReferenceException exceptions caught in this method will 
    // not cause the Debugger to stop here.. 
} 

नोट कि यह केवल काम करेंगे अपवादों में पकड़ा कहा तरीकों रहे हैं। यह सिर्फ इसलिए है कि अगर आप डीबगर को NullReferenceException अपवादों को हमेशा तोड़ने के लिए सेट करते हैं तो वे डीबगर को तोड़ने का कारण नहीं बनेंगे। और यह केवल विधियों पर काम करता है, और विधि के अंदर कोड के मनमाने ढंग से खंड नहीं ..

+0

यह वास्तव में मेरे लिए क्या करना है इसके लिए बिल्कुल सही है। यह स्थायी परिवर्तन नहीं है, अभी मुझे कुछ डीबग करने में मदद करने के लिए कुछ या कम है। –

+0

@MikyDinescu: वाह, मैंने कुछ नया सीखा, धन्यवाद (और +1)। – leppie

+0

यही कारण है कि हम एसओ से प्यार करते हैं - हम सब कुछ सीख रहे हैं;) –

-1

आप यह कर सकते हैं, लेकिन यह समाधान में सभी अपवादों को प्रभावित करता है।

Debug -> Exceptions -> Find... "Null Ref", डी-टिक फेंक दिया गया।

+1

फिर भी, उसे अभी भी अपने शेष कोड के लिए उस अपवाद को तोड़ने की जरूरत है, वहां केवल एक ही जगह है जहां वह इसे अनदेखा करना चाहता है। – BrainSlugs83

1

अपवाद मानते हुए कॉलर तक बबल नहीं होता है, इसे DebuggerHiddenAttribute के साथ प्राप्त किया जा सकता है।

टिप्पणी

विजुअल स्टूडियो 2005 डिबगर एक विधि के साथ इस विशेषता चिह्नित में बंद नहीं करता है और एक ब्रेकपाइंट विधि में सेट करने की अनुमति नहीं है से

[DebuggerHidden] 
    private static void M() 
    { 
     try 
     { 
      throw new NullReferenceException(); 
     } 
     catch (Exception) 
     { 
      //log or do something useful so as not to swallow. 
     }    
    } 
+0

जो मैं करने का प्रयास कर रहा हूं, उसके लिए [DebuggerNonUserCode] विशेषता और [DebuggerHidden] विशेषता निर्दिष्ट करने के बीच क्या अंतर है? –

+0

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

+3

काम नहीं करता है। डीबगर बस एक स्तर ऊपर बंद हो जाता है। अपवाद नहीं है, यह पकड़ा जा रहा है, लेकिन डीबगर व्यवहार करता है जैसा कि उसने किया था। (और जब आप कदम उठाते हैं, तो आप स्पष्ट रूप से देख सकते हैं कि यह बुलबुला नहीं है, लेकिन ब्रेक अभी भी होता है। - बहुत नाराज।) – BrainSlugs83