.NET 4.0を対象とするC#コンソールアプリケーション用のVisual Studio 2010デバッガのコンテキスト外のローカル変数に非常に奇妙な問題があります。私は他の同様の質問を探しましたが、同じ症状が出るものもありますが、この問題に直接当てはまるものはありません(彼らはすべて他の根本原因を持っているようです)。Visual Studio 2010デバッガでコンテキスト変数が不足しています
問題は、(すべてではないが)私はその値でツールチップを取得せず、ローカルウィンドウに表示されず、「現在の名前に「xyz」という名前が存在しないウォッチウィンドウに追加する場合は「コンテキスト」を選択します。それはいくつかの変数に影響するようですが、他の変数には影響しないと思われます。パターンを理解することはできません(メンバ対ローカル、クラス対構造体、またはその他の微分子に基づいているようには見えません)。私は自分のコンピュータとVisual Studioを再起動し、きれいなデバッグビルドであることを確認し、デバッグフレームが正しいことを確認し、ウォッチ画面の変数を更新して、さまざまな呪文や呪文を試みました。
下記のスクリーンショットを追加しました(より大きなバージョンはhttp://i.stack.imgur.com/JTFBT.pngです)。
任意の考え?
EDIT:
いくつかの追加情報を追加:
問題が再現可能です。 Visual Studioを完全にシャットダウンして再起動しても、まったく同じ変数が動作するか動作しません。これは私に、実際には記憶腐敗や何かではなく、体系的なものが実際にあると信じるようになります。
また、try-catchブロックに関連しているように見えます。 try文の外側にブレークポイントを配置すると、スコープ内の変数のいずれかが正常に表示されます。実行ポイントがtryステートメントに入ると、tryブロック以外の変数はすべてアクセスできなくなり、tryステートメント内の変数にしかアクセスできなくなります。デバッガがtryブロックを別のメソッドとして扱っているかのようです(ただし、コード/コンパイラにはスコープ内変数へのアクセス権があります)。誰もこの行動を以前に見たことがありますか?
ANOTHER EDIT:
私は(部分的に)私はのtry-catchが容疑者であることについて言ったことを取り戻す - それは、任意の外側のコンテキストのうち、コードデバッガの展示のこの部分では、この奇妙な撮影のものと思われますブロック。たとえば、スクリーンショット内のforeach文の中にブレークポイントを直接設定すると、各繰り返しで "port"変数の値を見ることができますが、foreach文の外の変数は(foreachブロックに入るとすぐに消えます) 。 tryブロックに入るとすぐに、 "port"変数が突然消えます。これは本当に変です。
また、要求どおり、メソッド全体のコードは次のとおりです。
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