Не удается установить точку останова в операторе Exit в Delphi? - PullRequest
3 голосов
/ 02 октября 2019

Я пытаюсь установить точку останова в операторе Exit, например:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  I := 5;

  if I = 5 then
    Exit;

end;

Но когда программа запускается, точка останова становится красным крестиком, который указывает, что она недоступна. Почему? Я использую версию проекта «Отладка» и кнопку «Выполнить» для отладки проекта.

Ответы [ 2 ]

5 голосов
/ 02 октября 2019

В качестве альтернативы использованию условной точки останова, как предлагает HeartWare (снижение производительности может быть значительным, в зависимости от того, как часто выполняется код), вы можете изменить свой код следующим образом:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  I := 5;
  if I = 5 then begin
    asm nop end; // <== put breakpoint here
    Exit;
  end;
end;

Это дает вам удобное место для установки точки останова.

4 голосов
/ 02 октября 2019

Вы не можете (надежно) установить точки останова на EXIT (или CONTINUE или BREAK), поскольку это не операторы в обычном смысле.

Однако вы можете установить точку останова на строке IF, а затемщелкните правой кнопкой мыши на красной точке для этой точки останова, выберите «Свойства точки останова» и введите то же условие в поле условия, что и в операторе IF:

Conditional Breakpoint

Thisнемного замедлит выполнение (больше, если эта условная точка останова находится в цикле), но активирует точку останова, только если условие выполнено (точка останова фактически останавливает программу каждый раз, когда ее ударили, но если она имеетнабор условий, отладчик оценит это выражение и продолжит выполнение, не уведомив вас, если условие не выполнено).

Конечно, это упрощенный пример, но вы обычно можете использовать условные контрольные точки в этих случаях для преодоленияограничение невозможности установить точку останова для точного оператора EXIT.

...