Einzelnen Beitrag anzeigen

Schokohase
(Gast)

n/a Beiträge
 
#4

AW: Repeat until high(Array) Problem

  Alt 10. Sep 2019, 08:07
Darum geht es nicht. Es nur ein kurzes Beispiel. Es geht darum das bei until kein Blauer Punkt ist. Also wird die Zeile nicht ausgeführt.
Leider falsch.

Kein blauer Punkt => Kein Breakpoint setzbar.

Es sagt leider nichts darüber aus, ob das ausgeführt wird oder nicht. Somit ein Bug der gefixt werden sollte.

Ob da was ausgeführt wird oder nicht siehst du aber in der CPU-Ansicht.

Breakpoint auf SetLength und dann in die CPU-Ansicht wechseln. Dort sieht man dann, wo (und ob) der Vergleich stattfindet (habe ich dir mal gelb markiert).
2019-09-10-09_13_55-repeat-cpu.png
Jetzt bekommt man auch eine Ahnung, warum in der Zeile mit dem until kein Breakpoint gesetzt werden kann.
Eine weitere Ahnung beschleicht einen, wenn man dann einen Breakpoint auf die Zeile mit dem repeat setzt. Wenn das Programm dort jetzt zum ersten Mal anhält, dann hat das Array schon eine Länge von 1.

Kleines Schmankerl noch zum Schluss:

Schau dir mal die blauen Punkte bei diesem Code an
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  aArray: Array of String;
  function IsFinished(): Boolean;
  begin
    Result := (high(aArray) >= 5);
  end;

begin
  repeat
    SetLength(aArray, length(aArray) + 1);
  until IsFinished();
end;
Die Zeile mit dem until hat jetzt einen blauen Punkt, dafür aber die Zeile mit dem repeat nicht mehr

Geändert von Schokohase (10. Sep 2019 um 08:25 Uhr)
  Mit Zitat antworten Zitat