-
Когда отлаживаешь цикл и точку останова ставишь на for i := 0 to X do,
то i почему то равно единице. Это глюк или настраивается? Как-будто отладчик пропускает нулевую позицию. Если ставить внутри begin end, то все нормально. Или это просто особенности/странности к которым нужно привыкнуть?
-
Это и не глюк и не настраивается до сих пор. Судя по твоему вопросу. Отладчик испокон веков не умел грамотно показывать значение переменной цикла.
-
Хотя если выключить оптимизацию, то вроде проблем с отладчиком быть не должно.
-
> Когда отлаживаешь цикл и точку останова ставишь на
> for i := 0 to X do
> то i почему то равно единице
Попробую угадать: при этом оптимизация включена и Х = 1 ?
-
А я бы так стелепатировал:
> точку останова ставишь на for i := 0 to X do, то i почему то равно единице.
> Если ставить внутри begin end, то все нормально.
Может всё дело в том, что на момент остановки на строке for i := 0 to X do собственно цикл еще не начал выполняться и переменная i не инициализирована начальным значением цикла (содержит мусор)?
-
более оптимальны циклы от большего к меньшему, поэтому и код оптимизатор приводит к такому, если конечно переменная цикла не участвует в расчетах внутри цикла (т.е. когда оптимизатор определяет, что порядок от меньшего к большему важен).
-
> более оптимальны циклы
вернее там не сам цикл, а проверка выхода из него
-
И всё же: разве в момент остановки на строке
for i := 0 to X do
переменная i уже инициализирована начальным значением цикла?
-
ну это в Delphi 7 глюк был, что показывался "истинный" счетчик ссылок, который бегает при оптимизированном коде сверху вниз.
Потом это поправили, но оставили глюк типа:
MyList[i].MyProperty
Когда MyProperty показывался от опять же истинного счетчика.
В XE вроде всё это поправлено.
-
>Юрий Зотов © (09.06.16 04:47)
[3]Оптимизация выключена.
>KSergey © (09.06.16 09:23)
[4]Без понятия, потому и спрашиваю.
Не важно от какого числа идет цикл. Компилятор единицу прибавляет. Т.е. он первый проход «съедает».
Вот 2 разных варианта:
http://hostingkartinok.com/show-image.php?id=da9bf12ea624c2e4c6ae6d275ed5b919Если внутри begin..end BP поставить, то все нормально.
Delphi XE6 prof.
-
-
> dmk © (09.06.16 14:12) [9]
> Не важно от какого числа идет цикл. Компилятор единицу прибавляет.
> Т.е. он первый проход «съедает».
Как это пропускает? ты же пишешь, что
> Если ставить внутри begin end, то все нормально.
т.е. по факту i принимает нужное значение. Или в вычислениях тоже пропуск?
-
>ты же пишешь, что
Также пишу:
когда точку останова ставишь на for i := 0 to X do
С вычислениями порядок. Внутри блока отлавливает.
-
На этой строке присваивания i ещё не дожно быть было. И смотри про оптимизацию выше.
Так что - F8 нажимаешь и всё равно не то значение?
-
-
>Так что - F8 нажимаешь и всё равно не то значение?
На строчке for - не то. Внутри блока правильное.
-
> [15] dmk © (09.06.16 16:14)
> На строчке for - не то. Внутри блока правильное.
Ну, тогда и проблемы нет.