Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
ВнизГлюк отладчика или оптимизация?.. Найти похожие ветки
← →
Ascan_ (2002-09-18 13:33) [0]пишем строчку:
...
for i:= 0 to 100 do edit1.text:= edit1.text+ inttostr(i)+" ";
...
И что мы видим? Примерно следующее:0 1 2 3 4 5...
Т.е. все работает. Но теперь пройдем под отладчиком (по F7).
И что же мы увидим? А то, что переменнаяi
меняется не от 0 до 100, а наоборот - от 100 до 0. И как понимать этот отладчик?! Что за пенки!
Сталкиваюсь с этим уже не прервый раз.
Вопрос: Как к этому относиться, с умором?.. :-)
← →
REA (2002-09-18 13:39) [1]Циклы на уменьшение работают быстрее. См. журнал "программист".
← →
Anatoly Podgoretsky (2002-09-18 13:56) [2]У тебя программа неверно работает?
← →
Ascan_ (2002-09-18 14:01) [3]Anatoly Podgoretsky
Нет, работает верно и все правильно, но вот данные, которые предоставляет отладчик по Ctrl-F7 - меня смущают...
← →
McSimm (2002-09-18 14:05) [4]
> И что же мы увидим?
Увидим, что переменная меняется от 0 до 100.
Потому что внутри цикла есть чтение i.
← →
Ascan_ (2002-09-18 14:07) [5]А может это я глючу... Ладно, вопрос пока отменяется...
← →
MegaBass (2002-09-18 14:09) [6]отключи оптимизацию, авось поможет.
← →
McSimm (2002-09-18 14:11) [7]>Ascan_
>А может это я глючу...
Нет, когда логика программы позволяет изменить направление отсчета без каких-либо последствий - оптимизатор действительно так поступает. Но на работе программы это отразиться не может
← →
Ascan_ (2002-09-18 14:17) [8]McSimm
Опцию {$O-} я уже давно ставлю по умолчанию. С этим вопросом я уже сталкивался, когда компилятор выбрасывал из кода операции, на его взгляд ненужные...
← →
Anatoly Podgoretsky (2002-09-18 14:20) [9]Зачем раз работает правильно, то ничего делать не надо, это внутреннее дело компилятора как ему делать цикл, использовать ли цикл в прямом порядке или в обратном. Или суть твоей задачи, что бы пользователь смотрел значение через отладчик, тогда другое дело.
← →
McSimm (2002-09-18 14:25) [10]>Ascan_
А мне за много лет так и не удалось столкнуться с ситуацией, когда мнение оптимизатора о нужности конструкций расходилось с моим.
И не разу не пришлось отключить его.
← →
Ascan_ (2002-09-18 15:14) [11]Anatoly Podgoretsky,
Зачем нужна клавиша F7? (это из разряда "Потрепаться")
Чтобы если все (или не все) работает, только смущает одна деталь - в какой-то момент промахивается алгоритм. То берешь эту клавишу F7. И... ну и понятно что дальше. А когда у тебя сложные встоенные циклы, а отладчик еще и от себя что-то добавляет, это начинает раздрожать.
А обходиться только созданием файла отчета - а это дополнительное усложнение кода.
Ладно, извращение нам не чуждо... :-)
← →
Esu (2002-09-18 15:25) [12]
> отладчик еще и от себя что-то добавляет, это начинает раздрожать.
Что ж у тебя там отладчик такого добавляет раздражающего ?
Во вложенных циклах посоветую кнопку F8 :)
← →
DiamondShark (2002-09-18 16:03) [13]Пора вопрос про цикл for в FAQ помещать ;)
← →
Anatoly Podgoretsky (2002-09-18 16:10) [14]Ascan_ (18.09.02 15:14)
Это твои личные проблемы, мне не F8 ни F7 проблем не добавляют и нужды в логах тоже не испытываю. Хотя прошраммы есть достаточно объемные, за 100 тысяч строк личного кода, не считая естественно библиотек. Вот последнии иногда доставляют проблемы, но я от них отказался.
← →
Донской (2002-09-19 19:26) [15]Я сталкивался с тем, что в D5 в подобной ситуации мне приходилдось менять цикл /for to do/ на /while do/ из-за того, что не выполнялись нужные операции из-за такой "оптимизации". Я довольно долго провозился, прежде чем найти это, может поэтому теперь больше доверяю циклу /while do/.
С уважением.
← →
Song (2002-09-19 19:39) [16]Циклы на уменьшение не треует дополнительной операции сравнения (мнемоника CMP) в теле цикла, потому что вылетают из цикла по Jz по установленному флагу нуля.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c