2016-04-05 7 views
10

तक पहुंचने पर NullReferenceException फेंकता है जब मैं .NET मूल संकलक के साथ एक UWP ऐप संकलित करता हूं और कोड अनुकूलन (अनिवार्य रूप से रिलीज़ मोड) चालू करता हूं, तो मुझे NullReferenceException मिलता है जब मैं वास्तविक अपवाद तक पहुंचने का प्रयास करता हूं पकड़ ब्लॉक।फ़िल्टर किए गए अपवाद हैंडलर में कोड अपवाद

कोड नमूना:

try 
{ 
    throw new ArgumentNullException("Param"); 
} 
catch (ArgumentNullException ex) when (ex.ParamName == "Param") 
{ 
    ErrorBlock.Text = ex.ParamName; // ErrorBlock is a TextBlock in the xaml 
} 
catch (Exception) 
{ 
} 

यह सही कैच ब्लॉक में चला जाता है, और एक NullReferenceException फेंकता है जब मैं ex एक्सेस करते हैं। यह केवल विफल रहता है यदि नेट नेटिव और कोड ऑप्टिमाइज़ेशन दोनों चालू हैं।

इस मुद्दे का कारण क्या है?

+1

@ पैन टैग क्यों हटाएं? ऐसा लगता है कि इस बिल्ड मोड से संबंधित है और इस प्रकार संभवतः .NET मूल के साथ एक कंपाइलर समस्या है। –

+0

क्योंकि वे अप्रासंगिक हैं। 'exc.Message' शून्य है। यह एक सादा NulLReferenceException है। ओपी ने कन्स्ट्रक्टर को बुलाया जो केवल पैरामीटर नाम –

+3

नहीं स्वीकार करता है, यह नहीं है ... संदेश डिफॉल्ट है। कृपया इस कोड को स्वयं आज़माएं। –

उत्तर

2

मैं .NET मूल रनटाइम और कंपाइलर टीम पर काम करता हूं।

यह हमारे कंपाइलर के अंदर एक बग है। आप प्रत्येक अपवाद हैंडलिंग क्षेत्र (कोशिश, पकड़, अंत में, कब) के बारे में सोच सकते हैं एक छोटे से समारोह या "funclet" के रूप में। "कब" (उर्फ फ़िल्टर ब्लॉक) के लिए स्टैक सेट करते समय हम अपवाद ऑब्जेक्ट का ट्रैक खो देते हैं। यह बग विंडोज टूल्स 1.3 में ठीक किया गया है, जिसने कोई बड़ा झटका नहीं दिया है, उसे दूसरे सप्ताह या दो में शिपिंग करना चाहिए। यह वीएस 2015 अपडेट 2 स्थापित करने वाले लोगों के लिए एक अद्यतन के रूप में दिखाई देगा।

यदि आपके कोई अन्य प्रश्न हैं तो मुझे बताएं।

+0

धन्यवाद @ मैट! मैंने इसके आस-पास 3 परिदृश्यों में थोड़ा अलग व्यवहार देखा: गैर-एसिंक, एसिंक लेकिन इंतजार नहीं किया गया, और async + प्रतीक्षित। अपडेट आने पर मैं सभी 3 शॉट दूंगा। – FUR10N

+0

उत्कृष्ट। कृपया हमें बताएं यह कैसे हुआ।हम [email protected] पर लोगों से सुनना पसंद करते हैं। –

5

मुझे बिल्कुल यकीन नहीं है कि यह गलत क्यों हो रहा है (अब कुछ समय से डीबगिंग कर रहा है), लेकिन await की कमी ने मुझे उत्सुक बना दिया।

आप का इंतजार है, तो ShowAsync विधि कोड चलाता है एक समस्या के बिना (जाहिर है आप विधि async बनाने के लिए करता है, तो आपको लगता है कि अभी तक ऐसा नहीं किया की जरूरत है):

await new MessageDialog("Argument null exception: " + argEx.Message).ShowAsync(); 

जबकि await बिना कोड ब्लॉक अनुत्तीर्ण होना। सुनिश्चित नहीं है कि यह एक बग है या आपको कुछ तय करना चाहिए ...

+0

हम्म, यह मेरे लिए भी काम करता है! मुझे एहसास नहीं हुआ कि यह async/प्रतीक्षा से संबंधित था। वास्तविक कोड जो मैंने पाया है, डिज़ाइन द्वारा किसी विशेष परिणाम की प्रतीक्षा नहीं कर रहा है (यह सब आईसीओएमंड्स में है, इसलिए वे एसिंक शून्य हो जाएंगे)। मुझे नहीं लगता कि आपको वैसे भी इंतजार करना होगा, है ना? – FUR10N

+0

हां, प्रत्येक 'async'' का इंतजार होना चाहिए। –

+0

यह एक लंबा चल रहा कार्य है और मुझे बाद में निरंतरता निर्धारित करने की आवश्यकता नहीं है। मैं यहां आग और भूलने का व्यवहार चाहता हूं। इसका इंतजार वास्तव में एक विकल्प नहीं है। – FUR10N

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