Войти
ПрограммированиеФорумГрафика

Странный баг логики под Visual Sudio

#0
17:48, 1 дек. 2016

Несколько раз натыкался - возникает по непонятной причине. Потом самопроизвольно проходит (последовательность лечебных действий также не определена).
Суть - вход в блок if когда условие НЕ выполняется.
Visual Studio 2013. Отладка Unity-проекта (Unity 5.4.1f1).
Как это выглядит:
Баг логики | Странный баг логики под Visual Sudio


#1
17:52, 1 дек. 2016

Испорченный PDB-файл. Он связывает исполняемый код с исходниками. Удали файл с расширением *.pdb из папки проекта и пересобери приложение. Отладчик врёт.

#2
17:58, 1 дек. 2016

оптимизированный код дебажишь?

#3
18:45, 1 дек. 2016

PANDA
Нет конечно. ДА и был бы оптимизированный - такая логика - как?

Skyfall
ОК. Спасибо. попробую.

#4
18:58, 1 дек. 2016

И в 15 студии тоже.
Юнити + с#.

При отладке иногда заходит в "не работающие" блоки.

#5
18:59, 1 дек. 2016

k119_55524
"Заходит" отображается в стеке?

#6
19:03, 1 дек. 2016

iLoled
Не обращал внимания.
Нарвусь, гляну.

#7
19:32, 1 дек. 2016

iLoled
И кстати - под неработающими блоками подразумевал не подпрограммы а блоки if{} и else{}.

#8
19:41, 1 дек. 2016

А как в конкретном месте определили, что в блок программа не зашла? Ну в смысле не вижу ни бряков, ни логов. А вдруг зашла?

#9
19:51, 1 дек. 2016

Допустим сработал блок с if(true), пошагово его проходим и после обратной фигурной скобки попадаем в блок else.

Подробно не изучал, сразу списал на баг студии. Но был удивлён такими сюрпризами.

#10
20:56, 1 дек. 2016

Homeship
> ДА и был бы оптимизированный - такая логика - как?
легко, дебагер легко может показывать ерунду в оптимизированном коде. Ты можешь думать, что условие выполняется.

#11
22:21, 1 дек. 2016

PANDA
Проблема как раз в том, что оно реально выполняется - из-за чего по вашему в отладку лезут?)) Чтобы исправить ошибки логики - потому что срабатывает то что не должно. А там вот такая засада - условие стоит, а она на него болт ложит.
Пересборка не помогает.

Такой еще момент - у меня вот последний раз такая ерунда возникла при использовании #if UNITY_ANDROID  && !UNITY_EDITOR. Может формирование таких блоков "сносит башню" студии?

#12
1:45, 2 дек. 2016

Homeship
> Проблема как раз в том, что оно реально выполняется - из-за чего по вашему в
> отладку лезут?
отладчик в watches может ерунду показывать, если код оптимизирован и твоё условие на самом деле может реально выполняться. выведи дополнительно в лог значение интересующих переменных и проверь.

#13
2:19, 2 дек. 2016

Suslik
Выше я написал - код НЕ оптимизирован.

Т.е. если по работе приложения - некий функционал срабатывающий по условию выполняется, но условие не выполняется (и по логу и по данным отладчика) - это значит, что отладчик ерунду показывает? Что интересно, по коду выше, данная внешняя переменная которая проверяется в условиях, показывает точно такое же значение, и блоки, завязанные на него, также выполняются. Т.е. значение-то одно, но выполняются блоки по условиям на разные значения. Логики - ноль.

А так, в остальном, все логично да - отладчик явно кажет ерунду или исполняет ерунду. Собственно из-за этого и тема. Вопрос в том, почему он это кажет \ исполняет и как его отучить?

ПрограммированиеФорумГрафика

Тема в архиве.