में संदर्भ चर के बाहर मुझे सी # कंसोल एप्लिकेशन लक्ष्यीकरण .NET 4.0 के लिए विजुअल स्टूडियो 2010 डीबगर में संदर्भ से बाहर होने वाले स्थानीय चर के साथ एक बहुत ही अजीब समस्या है। मैंने SO पर अन्य समान प्रश्नों की खोज की है, लेकिन कुछ के समान लक्षण हैं, लेकिन इस समस्या पर सीधे कोई भी लागू नहीं होता है (वे सभी अन्य रूट कारणों में दिखाई देते हैं)।विजुअल स्टूडियो 2010 डीबगर
समस्या यह है कि कुछ चर के लिए (लेकिन सभी नहीं) मुझे उनके मूल्य के साथ टूलटिप नहीं मिलता है, वे स्थानीय विंडो में दिखाई नहीं देते हैं, और मुझे "नाम 'xyz' वर्तमान में मौजूद नहीं है संदर्भ "अगर मैं उन्हें वॉच विंडो में जोड़ता हूं। ऐसा लगता है कि कुछ चर को प्रभावित करते हैं लेकिन दूसरों को नहीं, और मैं एक पैटर्न नहीं समझ सकता (यह सदस्य बनाम स्थानीय, वर्ग बनाम संरचना, या किसी अन्य विभेदक पर आधारित प्रतीत नहीं होता है)। मैंने अपने कंप्यूटर और विजुअल स्टूडियो को पुनरारंभ किया है, सत्यापित है कि मैं एक स्वच्छ डीबग बिल्ड में हूं, सुनिश्चित किया है कि डिबगिंग फ्रेम सही है, घड़ी स्क्रीन में चर को रीफ्रेश करना सुनिश्चित करें, और विभिन्न मंत्र और मंत्रों का प्रयास किया।
मैंने नीचे एक स्क्रीनशॉट शामिल किया है (http://i.stack.imgur.com/JTFBT.png पर बड़ा संस्करण)।
किसी भी विचार?
संपादित करें:
कुछ अतिरिक्त जानकारी जोड़ना:
समस्या 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();
}
}
फ्रीहैंड सर्कल के लिए +1 – James
अपनी परियोजना गुणों की जांच करें: क्या आप सुनिश्चित हैं कि आपकी डीबग कॉन्फ़िगरेशन को "अनुकूलित कोड" में बदला नहीं गया है? – phoog
@phoog सुझाव के लिए धन्यवाद। मैंने अभी प्रोजेक्ट गुणों की जांच की है और "अनुकूलित कोड" अनचेक किया गया है। – daveaglick