Интересно, если это как-то связано с тем, что моя программа имеет два отдельных потока
Да, очень так. Оранжевый цвет фона предназначен для того, чтобы предупредить вас о том, что произошел переход контекста потока, и вы больше не отлаживаете поток, который вы ранее просматривали. Обратите внимание на синее восклицательное наложение на стрелке, дополнительное предупреждение.
Некоторые примеры кода, что делает его кристально чистым:
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> Windows> Threads, обратите внимание на желтую стрелку на текущем потоке.
Теперь нажмите F10.
Одна из трех вещей может произойти, результат абсолютно случаен:
- Вы шаг к следующему оператору в том же потоке.
- Вторая нить также может попасть в точку останова.
- Второй поток может быть первым, кто приземлится на инструкцию и вызовет разрыв отладчика.
Также обратите внимание на желтый маркер в окне отладки Threads. В первой пуле маркер не двигался, тот же поток активировал перерыв. Цвет фона желтый. Если маркер действительно двигался, таким образом, сопоставляя последние 2 пули, тогда цвет фона оранжевый.
Нажимайте F10 для получения всех возможных результатов. И обратите внимание, что выбор цвета фона является точным совпадением с тем, изменился ли текущий поток в окне Threads. Третья пуля - самый вероятный результат в этой примерной программе.
Следующий эксперимент, который вы должны попробовать, - это щелкнуть правой кнопкой мыши по другой теме в окне Threads и выбрать Freeze. Нажатие F10 теперь постоянно попадает в один поток, а подсветка всегда желтая. То, что вам нужно делать, когда отладка потоков становится слишком сложной.
Короче говоря, зная, что вы отлаживаете другую тему, очень важно. Локальные переменные и трассировка стека могут быть совершенно разными.Оранжевый фон и синее восклицание предупреждают вас об этом.
Возможно, оранжевый, потому что это комбинация желтого (текущая строка исполнения) и красного (точка останова)? – David
Оранжевый - это когда у вас много потоков. –
Я не думаю, что это связано с winforms. Было бы здорово, если бы вы заменили winforms-тег на версию VS, потому что раскраска, скорее всего, зависит от версии – Breeze