Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 17.03.2016, 04:01   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 466
Репутация: 16
По умолчанию Почему при условии "false", трассировка входит в блок "true"

Доброе всем время суток,
Как-то не понятно отрабатывает трассировка кода:
Код:
begin
  if StrToInt(Edit1.Text) < 10 then
  begin
    showmessage('Hi');
    exit;
  end;
end;
при
"Edit1.Text = 20", компилятор тормозится на breakpoint строки "exit", но пропускает вывод сообщения.
Когда по идее, в этот блок он вообще не должен попадать.

Заранее спасибо за ответ
Миниатюры
Нажмите на изображение для увеличения
Название: err_if.jpg
Просмотров: 26
Размер:	32.9 Кб
ID:	80221  

Последний раз редактировалось KBO; 17.03.2016 в 04:27.
KBO вне форума   Ответить с цитированием
Старый 17.03.2016, 04:36   #2
vlad1389
Форумчанин
 
Регистрация: 03.02.2016
Сообщений: 290
Репутация: 3
По умолчанию

Брекпоинт должен отрабатывать всегда, не зависимо от того в каком куске кода он расположен, чтоб программист мог понять, дошло ли выполнение кода до этой точки, или застопорилось где-то по пути, попав, к примеру, в бесконечный цикл.
vlad1389 вне форума   Ответить с цитированием
Старый 17.03.2016, 05:09   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 466
Репутация: 16
По умолчанию

Если breakpoint стоит возле "if" (и там есть остановка) - это я могу понять.

А вот когда breakpoint, отрабатыват в блоке, в котором по логике не должен отрабатывать... Это только путаницу вводит.

Тем более если в этот блок "begin ... end", поместить другие строки кода (до "exit"), и поставить на них breakpoint, то дебагер их пропустит.
KBO вне форума   Ответить с цитированием
Старый 17.03.2016, 07:35   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,656
Репутация: 2631
По умолчанию

Это отработал оптимизатор. У вас exit вызовется при выходи из функции в любом случае, вот он и не стал лепит их две одинаковые штуки.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 17.03.2016, 09:51   #5
min@y™
Цифровой кот
Профессионал
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Адрес: 1600, пенсильвания-авеню, п.г.т. верхний Вашингтонск, 8126 км от МКАД, от поста ГАИ - налево.
Сообщений: 7,664
Репутация: 2449

icq: 100500
skype: kick-ass
По умолчанию

Достаточно открыть CPU и всё понятно станет.
__________________
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума   Ответить с цитированием
Старый 17.03.2016, 11:28   #6
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,693
Репутация: 5617
По умолчанию

Согласен с p51x, min@y™.

Вы поймите, работает оптимизатор. Он и превратил ваш код в что-то вроде:
Код:
if StrToInt(Edit1.Text)<20 then 
   ShowMessage('Hi');
Exit;
И точно, для проверки загляните в CPU, там это будет видно.
В данном случае Exit вообще не нужен, выкиньте его совсем.
Ну или допишите какой-нибудь код (например, выдачу сообщения) ПОСЛЕ блока с условием и посмотрите, будет остановка на Exit (предполагаю, что НЕ БУДЕТ).
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 20.03.2016, 11:09   #7
newerow1989
Я самый любопытный
Профессионал
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Адрес: RU, Алтайский край, Красногорский р-н, с. Балыкса, ул. Центральная Сообщений: 7,541 Репутация: 37104
Сообщений: 1,767
Репутация: 1655

skype: newerow1989
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
при
"Edit1.Text = 20"
В условие не зайдет, т.к. 20 < 10
__________________
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.narod.ru
[Паскаль] [Delphi]
newerow1989 вне форума   Ответить с цитированием
Старый 20.03.2016, 22:18   #8
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,693
Репутация: 5617
По умолчанию

newerow1989, к чему Ваш пост?
Вы скриншот в пост #1 не видите?
Там же видно, что
первое: в Edit1.Text занесено 20
второе, остановка произошла на строке Exit

вопрос у TC собствено - почему условие не должно выполняться, но, тем не менее, вопреки этому, управление программы передалось внутрь блока.

p.s. уже три дня прошло. не думаю, что вопрос по прежнему актуален..
Serge_Bliznykov на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для заданной строки определить все входящие в неё символ. Например: строка "abccbbabbac" состоит из символов "a", "b" и "c" Sandakan01 Помощь студентам 1 24.02.2016 04:20
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04


18:41.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.