10

当我看到一些奇怪的东西时,我正在调试我的代码。基本上它归结为:

怪异

你在这里看到的是一个带有负值的无符号整数......

我还注意到一些周围的变量没有value pop-up(?)而其他变量有。但是这个变量是唯一一个具有不可能值的变量。

这怎么可能?

我只有 C# Visual Studio 2010,所以我不知道这个问题是否存在于其他版本或不同语言中。如果是这种情况,我会相应地更改标题和标签。

4

2 回答 2

8

调试时,Visual Studio 将跟踪当前上下文中的每个变量。

考虑以下代码:

void SomeMethod1()
{
    int j = 0;
}

void SomeMethod2()
{
    int i = 0;
}//Breakpoint on this line.

当程序中断时,当前上下文为SomeMethod2. 此时,开发人员无法检查 的值是多少j。这是因为int j 在当前上下文中不是变量。

OP所描述行为背后的实际原因:

Visual Studio 检查变量的名称是否存在于当前上下文中,并且不检查变量本身是否存在于当前上下文中。

所以如果我们把变量名改成jin iSomeMethod1就可以突然看到它的“值”了。想象一下如果iinSomeMethod2是一个字符串会有多奇怪:

在此处输入图像描述

你什么时候应该知道这个?

每当您有一段代码不能立即清楚当前上下文是什么时。我在以下代码中遇到了这个问题:

private double CalculateFast(double d)
{
    //Depending on the size of d, either [Method 1] or [Method 2] is faster.
    //Run them both and use the answer of the first method to finish.
    Tasks.Task.Factory.StartNew(() = >
    {
        //Method 1   
    }

    //Method 2

    return answer;
}

我正在调试Method 2,但我认为我也可以查看变量Method 1。但事实并非如此,因为Method 1它有自己的背景。

于 2013-08-08T12:56:33.177 回答
1

尝试:

  • 清洁溶液
  • 重建解决方案
  • 没有成功 - 手动杀死 PDB 文件(或整个 bin 和 obj 文件夹)并重建

希望有帮助。

于 2013-08-08T19:11:27.137 回答