В комментарии к ответу Кена Микаил намекнул, что код находится внутри процедуры.
Это также было бы разумным предположением, глядя на код.
Итак, если мы настроим тест следующим образом:
Procedure Test;
var
a,counter: byte;
begin
a:=0;
for counter := 1 to 10 do//I put a breakpoint at this line
begin
a:=a*5;
a:=a+counter;
end;
end;
begin
Test;
end.
Установить оптимизацию на: Результат - как наблюдал Микаил, переход в цикл невозможен.
Выключить оптимизацию: Результат - возможен переход в цикл, как и предполагалось.
Теперь также примите во внимание вопрос Микаила в ответе Кена:
была ли невозможность войти в цикл из-за локальной области действия a
.
Кен ответил нет, но дело не в этом:
var
a : byte; // scope of a is outside of the procedure
Procedure Test;
var
counter: byte;
begin
a:=0;
for counter := 1 to 10 do//I put a breakpoint at this line
begin
a:=a*5;
a:=a+counter;
end;
end;
begin
Test;
end.
Теперь не имеет значения, включена оптимизация или нет, в любом случае возможно войти в цикл.
Итак, Айн абсолютно прав в своем ответе. (Протестировано в XE2)
Обновление:
Для включения в цикл есть три возможности:
- Отключить оптимизацию.
- Объявите
a
вне вашей локальной области.
- Вставить фиктивную операцию, используя
a
после цикла. Нравится: if (a < counter) then;
Ни один из этих шагов не является необычной процедурой отладки, о которой я нахожу, что весь этот вопрос.