Visual Studio行在调试模式下突出显示

时间:2016-05-02 12:32:08

标签: c# visual-studio visual-studio-2010 debugging visual-studio-2012

当我调试代码时,在大多数情况下,调试行会突出显示(通过Visual Studio调试器)黄色背景。这是截图: enter image description here

但是,在某些情况下,调试行以橙色背景突出显示:这是截图: enter image description here

此外,有时当我按下F10按钮时,代码行背景从黄色变为橙色,反之亦然。这些变化背后的模式是什么?

PS - 我想知道这是否与我的程序有两个在后台运行的独立线程有关?

1 个答案:

答案 0 :(得分:5)

  

我想知道这是否与我的程序有两个独立的线程

有关

是的,非常如此。橙色背景颜色用于警告您发生了线程上下文切换,并且您不再调试先前查看过的线程。请注意箭头上的蓝色感叹号覆盖,这是一个额外的警告。

一些示例代码使其清晰:

using System;
using System.Threading;

class Program {
    static void Main(string[] args) {
        new Thread(Example).Start();
        new Thread(Example).Start();
        Console.ReadLine();
    }

    static void Example() {
        var rng = new Random(Thread.CurrentThread.ManagedThreadId);
        for (int loop = 0; loop < 10000; ++loop) {
            Thread.Sleep(rng.Next(0, 100));
            Thread.Sleep(rng.Next(0, 100));
            Thread.Sleep(rng.Next(0, 100));
            Thread.Sleep(rng.Next(0, 100));
            Thread.Sleep(rng.Next(0, 100));
            Thread.Sleep(rng.Next(0, 100));
            Thread.Sleep(rng.Next(0, 100));
        }
    }
}

在其中一个Thread.Sleep()调用上设置断点。按F5键,执行将在断点处停止。背景是黄色的。使用Debug&gt; Windows&gt;线程,注意当前线程上的黄色箭头。

现在按F10。

可能发生以下三种情况之一,结果完全是随机的:

  • 您将进入同一主题中的下一个语句。
  • 第二个帖子也可能会遇到断点。
  • 第二个线程可能是第一个落在语句上并触发调试器中断的线程。

还要观察Threads调试器窗口中的黄色标记。在标记未移动的第一个项目中,同一个线程激活了中断。背景颜色为黄色。如果标记确实移动,从而匹配最后2个子弹,则背景颜色为橙色

反复按F10以获得所有可能的结果。请注意,背景颜色选择与“线程”窗口中当前线程是否更改完全匹配。第三个项目符号是此示例程序中最有可能的结果。

您应该尝试的下一个实验是右键单击“线程”窗口中的另一个线程并选择“冻结”。现在按F10始终按下相同的线程,突出显示始终为黄色。调试线程时需要做的事情变得非常困难。

长话短说,知道你正在调试一个不同的线程是非常重要的。局部变量和堆栈跟踪可能完全不同。橙色背景和蓝色感叹号警告你。