C#, Как может ложь == верный? См. Изображение

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

enter image description here

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

Править: Я сделал чистое->, восстанавливают и тем не менее то же.

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

27
задан Marius Schulz 30 November 2011 в 02:09
поделиться

8 ответов

[115194736-

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

42
ответ дан 28 November 2019 в 04:25
поделиться

Я использую приложение «Cherry Rplayer» для потоковой передачи на телефоне Android. Он позволяет выполнять потоковую передачу на пользовательские станции, а также выбирать что-либо из встроенных браузеров каталогов Shoutcast и Icecast. Вы также можете увидеть другие приложения от разработчиков, у них есть приложения для пользовательских ммс потоков и т.д.

-121--3202491-

Посмотрите на этой странице о аудио, видео и потоковой передаче на Android.

Эти простые примеры были извлечены с этой страницы. Он создает экземпляр медиаплеера, устанавливает источник данных (местоположение потока) и запускает связь.

MediaPlayer mp = new MediaPlayer();
mp.setDataSource(PATH_TO_FILE);
mp.prepare();
mp.start();
-121--3202490-

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

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

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

2
ответ дан 28 November 2019 в 04:25
поделиться

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

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

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

6
ответ дан 28 November 2019 в 04:25
поделиться

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

4
ответ дан 28 November 2019 в 04:25
поделиться

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

0
ответ дан 28 November 2019 в 04:25
поделиться

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

7
ответ дан 28 November 2019 в 04:25
поделиться

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

3
ответ дан 28 November 2019 в 04:25
поделиться

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

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

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

11
ответ дан 28 November 2019 в 04:25
поделиться