2011-12-29 16 views
16

में संदर्भ चर के बाहर मुझे सी # कंसोल एप्लिकेशन लक्ष्यीकरण .NET 4.0 के लिए विजुअल स्टूडियो 2010 डीबगर में संदर्भ से बाहर होने वाले स्थानीय चर के साथ एक बहुत ही अजीब समस्या है। मैंने SO पर अन्य समान प्रश्नों की खोज की है, लेकिन कुछ के समान लक्षण हैं, लेकिन इस समस्या पर सीधे कोई भी लागू नहीं होता है (वे सभी अन्य रूट कारणों में दिखाई देते हैं)।विजुअल स्टूडियो 2010 डीबगर

समस्या यह है कि कुछ चर के लिए (लेकिन सभी नहीं) मुझे उनके मूल्य के साथ टूलटिप नहीं मिलता है, वे स्थानीय विंडो में दिखाई नहीं देते हैं, और मुझे "नाम 'xyz' वर्तमान में मौजूद नहीं है संदर्भ "अगर मैं उन्हें वॉच विंडो में जोड़ता हूं। ऐसा लगता है कि कुछ चर को प्रभावित करते हैं लेकिन दूसरों को नहीं, और मैं एक पैटर्न नहीं समझ सकता (यह सदस्य बनाम स्थानीय, वर्ग बनाम संरचना, या किसी अन्य विभेदक पर आधारित प्रतीत नहीं होता है)। मैंने अपने कंप्यूटर और विजुअल स्टूडियो को पुनरारंभ किया है, सत्यापित है कि मैं एक स्वच्छ डीबग बिल्ड में हूं, सुनिश्चित किया है कि डिबगिंग फ्रेम सही है, घड़ी स्क्रीन में चर को रीफ्रेश करना सुनिश्चित करें, और विभिन्न मंत्र और मंत्रों का प्रयास किया।

मैंने नीचे एक स्क्रीनशॉट शामिल किया है (http://i.stack.imgur.com/JTFBT.png पर बड़ा संस्करण)।

enter image description here

किसी भी विचार?

संपादित करें:

कुछ अतिरिक्त जानकारी जोड़ना:

समस्या repeatable है। विजुअल स्टूडियो को पूरी तरह से बंद करने और पुनरारंभ करने के बाद भी सटीक वही चर या तो काम नहीं करते हैं या काम नहीं करते हैं। इससे मुझे विश्वास होता है कि वास्तव में स्मृति भ्रष्टाचार या कुछ के बजाय वास्तव में कुछ व्यवस्थित जा रहा है।

मुझे यह भी पता चला है कि यह कोशिश-पकड़ ब्लॉक से संबंधित प्रतीत होता है। यदि मैं कोशिश कथन के बाहर ब्रेकपॉइंट को स्थिति देता हूं तो मैं सामान्य रूप से इन-स्कोप चरों में से किसी एक को देख सकता हूं। जैसे ही निष्पादन बिंदु प्रयास कथन में प्रवेश करता है, कोशिश ब्लॉक के बाहर सभी चर पहुंच से बाहर हो जाते हैं और मैं केवल कोशिश कथन के अंदर वाले लोगों तक पहुंच सकता हूं। यह लगभग है जैसे डीबगर एक अलग विधि के रूप में प्रयास ब्लॉक का इलाज कर रहा है (हालांकि आप कोड/कंपाइलर को अभी भी इन-स्कोप चरों तक पहुंच प्राप्त कर सकते हैं)। क्या किसी ने इस व्यवहार को पहले देखा है?

किसी अन्य संपादन का:

मैं (आंशिक रूप से) वापस ले कि मैं क्या कोशिश पकड़ संदिग्ध होने के बारे में कहा - ऐसा लगता है कि किसी भी संलग्न के लिए कोड डिबगर दर्शाती इस अजीब लेने सामान के इस हिस्से को संदर्भ से बाहर में ब्लॉक। उदाहरण के लिए, यदि मैं स्क्रीनशॉट में फ़ोरैच स्टेटमेंट के अंदर सीधे ब्रेकपॉइंट सेट करता हूं तो मैं प्रत्येक पुनरावृत्ति पर "पोर्ट" वैरिएबल मान देख सकता हूं, लेकिन फ़ोरैच स्टेटमेंट के बाहर कोई भी चर नहीं है (जैसे ही मैं फ़ोरैच ब्लॉक में प्रवेश करता हूं) । फिर जैसे ही आप कोशिश ब्लॉक में प्रवेश करते हैं, "पोर्ट" चर अचानक अचानक चला जाता है। यह वास्तव में अजीब हो रहा है।

इसके अलावा, जैसा कि अनुरोध किया गया है, पूरी विधि के लिए कोड नीचे है।

private void ConfigureAnnouncerSockets(XDocument configDocument) 
{ 
    XElement socketsElement = configDocument.XPathSelectElement("/Configuration/Network/AnnouncerSockets"); 
    bool useDefault = true; 
    if (socketsElement != null) 
    { 
     //Use the default announcers? (they will be added at the end) 
     XAttribute defaultAttribute = socketsElement.Attribute("useDefault"); 
     if (defaultAttribute != null) 
     { 
      useDefault = Convert.ToBoolean(defaultAttribute); 
     } 

     //Get the default frequency 
     int defaultFrequency = Announcer.DefaultFrequency; 
     XAttribute frequencyAttribute = socketsElement.Attribute("frequency"); 
     if (frequencyAttribute != null) 
     { 
      defaultFrequency = Convert.ToInt32(frequencyAttribute.Value); 
     } 

     //Get all sockets 
     foreach (XElement socketElement in socketsElement.XPathSelectElements("./Socket")) 
     { 
      //Get the address 
      IPAddress address = IPAddress.Broadcast; 
      string addressAttribute = (string)socketElement.Attribute("address"); 
      if(!GetAddress(addressAttribute, ref address, true)) 
      { 
       Intelliplex.Log.Warn("Invalid announcer socket address: " + addressAttribute); 
       continue; 
      } 

      //Get the local address 
      IPAddress localAddress = null; 
      string localAddressAttribute = (string)socketElement.Attribute("localAddress"); 
      if(!GetAddress(localAddressAttribute, ref localAddress, false)) 
      { 
       Intelliplex.Log.Warn("Invalid announcer socket local address: " + localAddressAttribute); 
       continue; 
      } 

      //Get the port(s) 
      List<int> ports = new List<int>(); 
      string[] ranges = ((string)socketElement.Attribute("port")).Split(new[] { ',' }); 
      foreach (string range in ranges) 
      { 
       string[] portPair = range.Split(new[] { '-' }); 
       int firstPort = Convert.ToInt32(portPair[0]); 
       int lastPort = portPair.Length > 1 ? Convert.ToInt32(portPair[1]) : firstPort; 
       do 
       { 
        ports.Add(firstPort); 
       } while (++firstPort <= lastPort); 
      } 

      //Get the local port 
      int localPort = socketElement.Attribute("localPort") != null 
       ? Convert.ToInt32((string)socketElement.Attribute("localPort")) : 0; 

      //Get the frequency 
      int frequency = socketElement.Attribute("frequency") != null 
       ? Convert.ToInt32((string)socketElement.Attribute("frequency")) : defaultFrequency; 

      //Create the socket(s) and add it/them to the manager 
      foreach (int port in ports) 
      { 
       try 
       { 
        IPEndPoint endPoint = new IPEndPoint(address, port); 
        IPEndPoint localEndPoint = localAddress == null 
         ? new IPEndPoint(IPAddress.Any, 0) : new IPEndPoint(localAddress, localPort); 
        Announcer socket = new Announcer(frequency, endPoint, localEndPoint); 
        AnnouncerSockets.Add(socket); 
       } 
       catch (Exception ex) 
       { 
        Intelliplex.Log.Warn("Could not add announcer socket: " + ex.Message); 
       } 
      } 
     } 
    } 

    //Add default announcement sockets? 
    if (useDefault) 
    { 
     ConfigureDefaultAnnouncerSockets(); 
    } 
} 
+13

फ्रीहैंड सर्कल के लिए +1 – James

+1

अपनी परियोजना गुणों की जांच करें: क्या आप सुनिश्चित हैं कि आपकी डीबग कॉन्फ़िगरेशन को "अनुकूलित कोड" में बदला नहीं गया है? – phoog

+0

@phoog सुझाव के लिए धन्यवाद। मैंने अभी प्रोजेक्ट गुणों की जांच की है और "अनुकूलित कोड" अनचेक किया गया है। – daveaglick

उत्तर

8

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

http://www.sharpcrafters.com/forum/Topic5794-21-1.aspx#bm7927

इसके अलावा, नवीनतम PostSharp हॉटफिक्स राज्यों हॉटफिक्स 2.1.5.6 में तय मुद्दों में से एक "डिबगिंग प्रतीकों है के लिए रिलीज नोट्स में: स्थानीय चर प्रतीकों निहित iterators में खो दिया। "

जब मैंने नवीनतम और महानतम पोस्टशर्प स्थापित किया तो समस्या दूर हो गई और ब्रह्मांड सामान्य हो गया। उम्मीद है कि यह प्रश्न/उत्तर पोस्टशर्प का उपयोग करके किसी और की मदद करेगा जो अगले आधिकारिक पोस्टशर्प रिलीज से पहले इस अजीब व्यवहार पर ठोकर खाएगा। सुनिश्चित करें कि आप हॉटफिक्स 2.1.5.6 या इससे अधिक (बग की गंभीरता को देखते हुए, यह संभवतः एक वास्तविक रिलीज़ होना चाहिए था)।

सभी की मदद के लिए धन्यवाद।

+1

जानना अच्छा है ... और खुश है कि यह वीएस 2010 में एक बग नहीं है – Yahia

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