【问题标题】:Visual Studio showing wrong values while debugging?Visual Studio 在调试时显示错误的值?
【发布时间】:2013-08-08 12:56:33
【问题描述】:

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

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

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

这怎么可能?

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

【问题讨论】:

    标签: c# visual-studio debugging


    【解决方案1】:

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

    考虑以下代码:

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

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

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

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

    所以如果我们将SomeMethod1中的变量j改名为i,就可以突然看到它的“值”了。想象一下,如果 SomeMethod2 中的 i 是一个字符串会变得多么奇怪:

    您什么时候应该知道这一点?

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

    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 有自己的上下文。

    【讨论】:

    • 1.它被称为“Visual Studio”。 2. 这是怎么回事?
    • 1.已编辑。 2. 软件错误是计算机程序或系统中产生不正确或意外结果的错误、缺陷、故障或故障。我会说结果是出乎意料的。而且我从来没有称它为绝对错误。
    • 该定义不适用于此处。 Visual Studio 在这方面没有错误或故障。您的期望是错误的,这不是错误。 ;-) 如果您将 VS2010 标记替换为“Visual Studio”并删除所有对“错误”的引用,我会给您一个赞成票,因为这是一个很好的参考问题,有这个广泛的答案。
    • 如果一个程序没有达到用户的期望,用户会称之为bug。无论是他们认为应该做不同事情的设计功能(可能需要设计用户教育),还是设计功能没有正确做它应该做的事情(功能错误),用户都不知道区别。因此,当用户将功能或正常行为报告为错误时,不要感到惊讶或生气——只要非常礼貌地教育他们。
    • 简而言之(还有更多内容):在断点处,执行暂停。您只是在检查当前堆栈。调试器不知道不在堆栈上的函数或其局部变量。如果您检查不同函数中的变量或碰巧具有相同名称的另一个类,它可能会显示错误(“这个不在此堆栈中”)或显示具有相同名称的变量。跨度>
    【解决方案2】:

    尝试:

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

    希望对您有所帮助。

    【讨论】:

    • CodeCaster。我过去也有类似的情况。我的 bool 变量在调试器中始终为 false,即使在我明确将其设置为 true 之后也是如此。问题是 - Visual Studio 由于某些原因停止更新 PDB 文件。在我手动删除它们后,一切都会按预期工作。
    • 这仍然是一个完全不同的问题。 OP 在不同的上下文中有两个同名变量。无论您删除 PDB 并重建多少次,结果都将保持不变。
    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多