2015-12-23 6 views
5

के लिए परिवर्तनीय नाम प्राप्त करना NullReferenceException के लिए स्टैक निशान बहुत ही अनौपचारिक है, उनमें केवल विधि का नाम और कॉल स्टैक शामिल है। किसी विधि में कोई भी चर शून्य हो सकता है और जब डीवी मशीन पर बग पुन: उत्पन्न नहीं होता है तो डीबग करना मुश्किल होता है।NullReferenceException

क्या आप उस त्रुटि पर अधिक जानकारी प्राप्त करने के लिए एक तरीका जानते हैं, शायद परिवर्तनीय नाम प्राप्त कर रहे हैं? या क्या आपके पास इसे डीबग करने के बेहतर तरीके हैं?

+1

आप चर नाम नहीं मिल सकता है:

सरल समाधान अधिक सुसंगत अशक्त अपने खुद के कोड में जाँच में निर्माण करना है। आप उस रेखा को निर्धारित कर सकते हैं जहां अपवाद हुआ था। – Alex

+0

@Alex हाँ, लेकिन उत्पादन में जिसके लिए .pdb फ़ाइल वितरित करने की आवश्यकता है। और यह obfuscators के उपयोग को भी रोकता है। – Elmo

+4

@ एल्मो फिर शुभकामनाएँ। यदि आप obfuscators का उपयोग कर रहे हैं तो स्टैक ट्रेस कचरा होने जा रहा है। –

उत्तर

9

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

Inspect the managed stack पर मेरा उत्तर भी देखें और ब्लॉग पोस्ट इसका संदर्भ देता है।

void Foo(Bar b) 
{ 
    if (b == null) throw new ArgumentNullException(nameof(b)); 

    ... 
} 
+0

विशेष रूप से उपयोगी यदि आप बाद में डीबग करते समय सैनिटी जांच के लिए 'Debug.AssertNonNull' (या जो कुछ भी होना चाहिए) शामिल है। –

+0

डीबग स्थिति में ओवरहेड की समस्या क्या है? –

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