| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Глюк дебагера Delphi 7 и 2005 |
| Автор: LamerTM 16.1.2009, 12:09 | ||
Брейкпоинт поставить на первую строку процедуры CF. Запустить, нажать Button1. Потом пару раз F7. Глюк дебагера такой: неправильно отображается значение переменной i в процедуре CF во время выполнения цикла. Первое значение должно быть 1 (по факту и есть 1), но дебагер в хинте показывает i=25. На следующей итерации i=24, потом i=23, и т.д. выглядит это прикольно. Например так: http://ipicture.ru/ Такой глюк у меня в Delphi 7 и в Delphi 2005. Ну а вопрос: в каких делфях такого глюка нет (может в 2007?) |
| Автор: bems 16.1.2009, 20:37 |
| это не глюк, а результат оптимизации. если в теле цикла сделать к примеру Caption := inttostr(i) то все встанет на место. А раз ты не используешь в теле цикла переменную, то компилятор вполне логично считает что тебе важно только количество итераций, но не последовательность значений |
| Автор: bems 22.1.2009, 20:38 |
| а этого-то я и не заметил Тогда присоединяюсь к топикстартеру, что бы это могло быть? |
| Автор: Romikgy 23.1.2009, 16:30 |
| не нравится убери оптимизацию! PS по вопросу , процу легче циклы считать от числа к нулю , ибо ноль сразу устанавливат флаг нуля , т.е. без доп. телодвижений можно ноль или нет и сразу делать то что нужно |
| Автор: bems 23.1.2009, 18:10 |
| Romikgy, то что ты говоришь мне известно, но помнится это поведение отключалось при любом использовании переменной в теле цикла. У топикстартера есть такое использование поэтому имхо это сомнительная оптимизация. |
| Автор: СЭНСЭЙ 12.8.2016, 04:03 | ||
| и что - так и не нашли решение? беда в том, что значение переменной идет в обратном порядке при дебаге, а если в цикле есть код типа
то в условии подставляется 1 , а при вычислении - 3 это ни в какие ворота не лезет какая может быть оптимизация? Что с этим делать? |
| Автор: Alexeis 12.8.2016, 09:46 |
Эта оптимизация называется разворот цикла. Операция сравнения с нулем производится быстрее чем с некоторым числом, поэтому большинство компиляторов если видят что от порядка ничего не меняется, разворачивают цикл в обратном направлении. Как там сейчас в новых делфях я не в курсе, но по идее когда проект компилируется в режиме дебага так не должно быть, но в старых версиях оптимизация включалась и в дебаге, так что приходилось ее отключать ключом {$O-} . Думаю это поможет. |