![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюк отладчика или оптимизация?.. [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]Циклы на уменьшение работают быстрее. См. журнал "программист".