Конференция "Прочее" » Странное поведение отладчика
 
  • dmk © (09.06.16 01:39) [0]
    Когда отлаживаешь цикл и точку останова ставишь на for i := 0 to X do,
    то i почему то равно единице. Это глюк или настраивается? Как-будто отладчик пропускает нулевую позицию. Если ставить внутри begin end, то все нормально. Или это просто особенности/странности к которым нужно привыкнуть?
  • Германн © (09.06.16 01:55) [1]
    Это и не глюк и не настраивается до сих пор. Судя по твоему вопросу. Отладчик испокон веков не умел грамотно показывать значение переменной цикла.
  • Германн © (09.06.16 02:08) [2]
    Хотя если выключить оптимизацию, то вроде проблем с отладчиком быть не должно.
  • Юрий Зотов © (09.06.16 04:47) [3]
    > Когда отлаживаешь цикл и точку останова ставишь на
    >  for i  := 0 to X do
    > то i почему то равно единице


    Попробую угадать: при этом оптимизация включена и Х = 1 ?
  • KSergey © (09.06.16 09:23) [4]
    А я бы так стелепатировал:

    > точку останова ставишь на for i := 0 to X do, то i почему то равно единице.
    > Если ставить внутри begin end, то все нормально.


    Может всё дело в том, что на момент остановки на строке for i := 0 to X do собственно цикл еще не начал выполняться и переменная i не инициализирована начальным значением цикла (содержит мусор)?
  • sniknik © (09.06.16 10:30) [5]
    более оптимальны циклы от большего к меньшему, поэтому и код оптимизатор приводит к такому, если конечно переменная цикла не участвует в расчетах внутри цикла (т.е. когда оптимизатор определяет, что порядок от меньшего к большему важен).
  • sniknik © (09.06.16 10:31) [6]
    > более оптимальны циклы
    вернее там не сам цикл, а проверка выхода из него
  • KSergey © (09.06.16 10:42) [7]
    И всё же: разве в момент остановки на строке
    for i := 0 to X do
    переменная i уже инициализирована начальным значением цикла?
  • ttUser © (09.06.16 12:11) [8]
    ну это в Delphi 7 глюк был, что показывался "истинный" счетчик ссылок, который бегает при оптимизированном коде сверху вниз.
    Потом это поправили, но оставили глюк типа:

    MyList[i].MyProperty

    Когда MyProperty показывался от опять же истинного счетчика.

    В XE вроде всё это поправлено.
  • dmk © (09.06.16 14:12) [9]
    >Юрий Зотов ©   (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:18) [10]
    Не то чтобы сильно напрягает, но все же — зачем и почему ??? :)
    Просто с толку сбивает.

    Кстати во FreePascal также сделано:
    http://hostingkartinok.com/show-image.php?id=b76f1f9f62367e7bd733c6e9b0210f1b

    Видимо я что-то не понимаю или это с оптимизацией кода связано.
    В общем я в растерянности :)
  • KSergey © (09.06.16 15:33) [11]
    > dmk ©   (09.06.16 14:12) [9]
    > Не важно от какого числа идет цикл. Компилятор единицу прибавляет.
    >  Т.е. он первый проход «съедает».


    Как это пропускает? ты же пишешь, что

    > Если ставить внутри begin end, то все нормально.

    т.е. по факту i принимает нужное значение. Или в вычислениях тоже пропуск?
  • dmk © (09.06.16 15:39) [12]
    >ты же пишешь, что
    Также пишу:
    когда точку останова ставишь на for i := 0 to X do



    С вычислениями порядок. Внутри блока отлавливает.
  • Inovet © (09.06.16 15:48) [13]
    На этой строке присваивания i ещё не дожно быть было. И смотри про оптимизацию выше.

    Так что - F8 нажимаешь и всё равно не то значение?
  • NoUser © (09.06.16 16:04) [14]
    XE-8, DX-S, DX-B  http://hkar.ru/J4lW
    FPC3.0-Lazarus 1.6  http://hkar.ru/J4lX
  • dmk © (09.06.16 16:14) [15]
    >Так что - F8 нажимаешь и всё равно не то значение?

    На строчке for - не то. Внутри блока правильное.
  • Inovet © (09.06.16 18:52) [16]
    > [15] dmk ©   (09.06.16 16:14)
    > На строчке for - не то. Внутри блока правильное.

    Ну, тогда и проблемы нет.
 
Конференция "Прочее" » Странное поведение отладчика
Есть новые Нет новых   [134432   +19][b:0][p:0.001]