Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глюк отладчика или оптимизация?.. [D6, Win95/98, Win2k]


Ascan_ ©   (2002-09-18 13:33:00) 

пишем строчку:

...
for i:= 0 to 100 do edit1.text:= edit1.text+ inttostr(i)+" ";
...

И что мы видим? Примерно следующее: 0 1 2 3 4 5...
Т.е. все работает. Но теперь пройдем под отладчиком (по F7).
И что же мы увидим? А то, что переменная iменяется не от 0до 100, а наоборот - от 100до 0. И как понимать этот отладчик?! Что за пенки!
Сталкиваюсь с этим уже не прервый раз.
Вопрос: Как к этому относиться, с умором?.. :-)


Song   (2002-09-19 19:39:00) [1]

Циклы на уменьшение не треует дополнительной операции сравнения (мнемоника CMP) в теле цикла, потому что вылетают из цикла по Jz по установленному флагу нуля.


Донской   (2002-09-19 19:26:00) [2]

Я сталкивался с тем, что в D5 в подобной ситуации мне приходилдось менять цикл /for to do/ на /while do/ из-за того, что не выполнялись нужные операции из-за такой "оптимизации". Я довольно долго провозился, прежде чем найти это, может поэтому теперь больше доверяю циклу /while do/.
С уважением.


Anatoly Podgoretsky   (2002-09-18 16:10:00) [3]

Ascan_ (18.09.02 15:14)
Это твои личные проблемы, мне не F8 ни F7 проблем не добавляют и нужды в логах тоже не испытываю. Хотя прошраммы есть достаточно объемные, за 100 тысяч строк личного кода, не считая естественно библиотек. Вот последнии иногда доставляют проблемы, но я от них отказался.


DiamondShark   (2002-09-18 16:03:00) [4]

Пора вопрос про цикл for в FAQ помещать ;)


Esu   (2002-09-18 15:25:00) [5]


> отладчик еще и от себя что-то добавляет, это начинает раздрожать.

Что ж у тебя там отладчик такого добавляет раздражающего ?
Во вложенных циклах посоветую кнопку F8:)


Ascan_   (2002-09-18 15:14:00) [6]

Anatoly Podgoretsky,
Зачем нужна клавиша F7? (это из разряда "Потрепаться")
Чтобы если все (или не все) работает, только смущает одна деталь - в какой-то момент промахивается алгоритм. То берешь эту клавишу F7. И... ну и понятно что дальше. А когда у тебя сложные встоенные циклы, а отладчик еще и от себя что-то добавляет, это начинает раздрожать.
А обходиться только созданием файла отчета - а это дополнительное усложнение кода.
Ладно, извращение нам не чуждо... :-)


McSimm   (2002-09-18 14:25:00) [7]

>Ascan_
А мне за много лет так и не удалось столкнуться с ситуацией, когда мнение оптимизатора о нужности конструкций расходилось с моим.
И не разу не пришлось отключить его.


Anatoly Podgoretsky   (2002-09-18 14:20:00) [8]

Зачем раз работает правильно, то ничего делать не надо, это внутреннее дело компилятора как ему делать цикл, использовать ли цикл в прямом порядке или в обратном. Или суть твоей задачи, что бы пользователь смотрел значение через отладчик, тогда другое дело.


Ascan_   (2002-09-18 14:17:00) [9]

McSimm
Опцию {$O-}я уже давно ставлю по умолчанию. С этим вопросом я уже сталкивался, когда компилятор выбрасывал из кода операции, на его взгляд ненужные...


McSimm   (2002-09-18 14:11:00) [10]

>Ascan_
>А может это я глючу...
Нет, когда логика программы позволяет изменить направление отсчета без каких-либо последствий - оптимизатор действительно так поступает. Но на работе программы это отразиться не может


MegaBass   (2002-09-18 14:09:00) [11]

отключи оптимизацию, авось поможет.


Ascan_   (2002-09-18 14:07:00) [12]

А может это я глючу... Ладно, вопрос пока отменяется...


McSimm   (2002-09-18 14:05:00) [13]


> И что же мы увидим?

Увидим, что переменная меняется от 0 до 100.

Потому что внутри цикла есть чтение i.


Ascan_   (2002-09-18 14:01:00) [14]

Anatoly Podgoretsky
Нет, работает верно и все правильно, но вот данные, которые предоставляет отладчик по Ctrl-F7 - меня смущают...


Anatoly Podgoretsky   (2002-09-18 13:56:00) [15]

У тебя программа неверно работает?


REA   (2002-09-18 13:39:00) [16]

Циклы на уменьшение работают быстрее. См. журнал "программист".


Наверх

Титульная страница Поиск, карта сайта Написать письмо