Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

Заранее спасибо за ответ
Изображения
Тип файла: jpg err_if.jpg (32.9 Кб, 125 просмотров)

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

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

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

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

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

Это отработал оптимизатор. У вас exit вызовется при выходи из функции в любом случае, вот он и не стал лепит их две одинаковые штуки.
p51x вне форума Ответить с цитированием
Старый 17.03.2016, 08:51   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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