Подтвердить что ты не робот

С# Как false = true? См. Рисунок

Я только что столкнулся с одной из самых ошеломляющих ошибок. false == true Какую информацию вам нужно было бы подтвердить или отладить это поведение? Я никогда не видел ничего подобного.

enter image description here

  • VS2008 sp1
  • Режим отладки | Любой Cpu
  • IIS 7.5

Изменить: Я сделал clean- > rebuild и все тот же.

Здесь собраны и регистрируются. Я не знаю, как это прочитать, но, возможно, это может помочь кому-то другому.

4b9b3361

Ответ 1

Я полагаю, что ваши файлы PDB не в фазе, и у вас есть различия в том, что действительно выполняется, и что Visual Studio видит в качестве номера строки. Попробуйте перестроить. Мы все знаем, что невозможно иметь true = false, или мир, который, как мы знаем, может измениться: -)

Ответ 2

Действительно ли это ошибка? Отладчик может часто выделять неправильные строки, если вы кормите его неправильным pdb, поэтому это может быть ложным результатом. Также тривиально воспроизводить, используя "немедленную" панель, чтобы изменить значение после теста.

Если result - поле или захваченная переменная, он также может быть установлен внешним кодом (возможно, в другом потоке).

Если result не был bool, а ваш собственный пользовательский тип, вы можете просто переопределить == или предоставить собственный true/false.

Ответ 3

Вероятно, источник не соответствует текущей версии или там есть ошибка в отладчике.

Ответ 4

Частично проблема заключается в том, что вы считаете, что отладчик на 100% прав. На самом деле это не так и зависит от ряда ситуаций, когда значения могут иметь неправильные или вводящие в заблуждение отображения. Наиболее распространенными причинами этого являются...

  • Несоответствующие файлы PDB. Обычно это приведет к по крайней мере диалогу предупреждения в отладчике о несоответствующих исходных файлах, но не всегда.
  • Простая проверка данных или ошибка отображения с помощью базового анализатора выражений. Вероятно, в этом случае это простой локальный и примитивный тип.
  • Оптимизации, приводящие к неправильному отображению данных.

Но это на самом деле почти наверняка не ложно. Самый простой способ проверить это - использовать вызов Debug.WriteLine для вывода значения в окно вывода.

Ответ 5

Вы уверены, что выбрано исключение? Моя догадка заключается в том, что ваш метод isContextSignatureValid на самом деле бросает исключение, но отладчик Visual Studio иногда может опередить себя и выделить строку, которая на самом деле не бросает исключение.

Ответ 6

Возможно, вы переместили указатель текущей инструкции (желтая стрелка) с помощью мыши случайно в режиме разрыва... Это случилось со мной однажды, и я перевернулся.: -)

Ответ 7

Просто добавьте небольшое предложение:

Если вы когда-либо путаете результаты отладчика, вставьте там Console.WriteLine() и получите сам код, чтобы рассказать вам, что происходит. Это может часто устранять путаницу.

(Вы также можете получить такой эффект при отладке кода выпуска, но вы сказали, что это отладочная сборка, которая устраняет этот подозреваемый)

Ответ 8

Я видел это раньше. Сотрудник был убежден, что обнаружил ошибку в .NET Framework или CLR. В конце концов, это была просто старая проблема сборки или pdb-синхронизации.