2011-12-19 21 views
6

मुझे कुछ याद आना चाहिए ... अपवाद कैसे फेंक दिया जा सकता है, फिर भी अपवाद के बाद कोड डीबगर में हिट हो जाता है?अपवाद के बाद कोड निष्पादन कैसे किया जाता है?

private UpdaterManifest GetUpdaterManifest() 
{ 
    string filePathAndName = Path.Combine(this._sourceBinaryPath, this._appName + ".UpdaterManifest"); 

    if (!File.Exists(filePathAndName)) 
    { 
     // This line of code gets executed: 
     throw new FileNotFoundException("The updater manifest file was not found. This file is necessary for the program to run.", filePathAndName); 
    } 

    UpdaterManifest updaterManifest; 

    using (FileStream fileStream = new FileStream(filePathAndName, FileMode.Open)) 
    { 
     // ... so how is it that the debugger stops here and the call stack shows 
     // this line of code as the current line? How can we throw an exception 
     // above and still get here? 
     XmlSerializer xmlSerializer = new XmlSerializer(typeof(UpdaterManifest)); 
     updaterManifest = xmlSerializer.Deserialize(fileStream) as UpdaterManifest; 
    } 

    return updaterManifest; 
} 
+1

शायद आप श्रृंखला को आगे अपवाद को पकड़ने? –

+1

शायद आप विभिन्न धागे देख रहे हैं? – Strillo

+0

क्या यह कोड एकाधिक धागे से एक्सेस किया गया है? –

उत्तर

5

कुछ परिदृश्य के जहां यह आम तौर पर हो सकता है:

  • जब विकल्प "स्रोत फ़ाइलों की आवश्यकता होती है बिल्कुल मूल संस्करण से मेल करने के लिए" बंद। उस स्थिति में, जब आपकी फ़ाइलें सिंक हो जाती हैं तो आपको चेतावनी नहीं मिलती है।

  • जब आईडीई के लिए पूछता है "बिल्ड त्रुटियां थीं। क्या आप अंतिम सफल निर्माण जारी रखना और चलाने के लिए चाहते हैं?", इस मामले में आईडीई सही रेखा के बारे में गलत हो सकता है, क्योंकि यह पहले के संस्करण को चलाता है।

  • जब आप अपने कोड के रिलीज़ संस्करण को डिबग कर रहे हैं, जहां कुछ हिस्सों को अनुकूलित किया जाता है। इसके परिणामस्वरूप हाइलाइट की गई पंक्ति में स्रोत में अगली उपलब्ध रेखा होती है जो अनुकूलित कोड में प्रतिबिंबित और वास्तविक कथन (यह अक्सर दिखाई देगी जो बाहरी असेंबली के साथ डिबगिंग करते समय देखेंगे)।


संपादित करें: मैं अपने कोड पढ़ने में भूलना तरह-की। "फेंक" और जिस पंक्ति को हाइलाइट किया जाता है, उसके बीच, केवल एक चर की घोषणा है, निष्पादित करने के लिए बिल्कुल कोई कोड नहीं है। मुझे लगता है कि आप का मतलब है कि "उपयोग ..." कोड हाइलाइट किया गया था? क्योंकि यह अपेक्षा की जाती है: फेंकने के बाद यह पहली पंक्ति है (फेंक-कथन स्वयं डीबगर के लिए त्रुटि को पकड़ नहीं लेता है)।

स्क्रीनशॉट देखें: enter image description here

+1

"स्रोत फ़ाइलों की आवश्यकता है ..." की जांच की गई है। इसके अलावा, कोई बिल्ड त्रुटियां नहीं हैं। मैं रिलीज संस्करण डीबग नहीं कर रहा हूं। यह कुछ मूर्खतापूर्ण होने वाला है, जहां मुझे जाना चाहिए था, लेकिन अभी मैं अटक गया हूं। –

+0

धन्यवाद, हाबिल। मैं थ्रो स्टेटमेंट पर F10 को मारते समय कैच ब्लॉक को अगली पंक्ति होने की उम्मीद कर रहा था। मार्क की तरह कहा, शायद यह सिर्फ एक आईडी से दूर आईडीई है। मेरा अपवाद ठीक उसी तरह दिखता है जैसा आपने ऊपर दिखाया है। एक बार जब मैं उस बिंदु के बाद एफ 10 मारा, तो मुझे पकड़ ब्लॉक में सही ढंग से ले जाया गया। –

+0

बिल्कुल। धन्यवाद। –

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