Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi unerklärlicher Fehler (https://www.delphipraxis.net/212857-unerklaerlicher-fehler.html)

wendelin 14. Apr 2023 12:32

unerklärlicher Fehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Delphifreunde,

bitte schaut euch mal folgenden Code und das dazugehörige Bild an.
Delphi-Quellcode:

procedure TForm1.BitBtn1Click(Sender: TObject);

VAR MyVirt_Frei     : Array[0..8] of String;
    i,k,m           : Integer;
    ADate           : TDateTime;                  // oder Double oder extended ?
    MyADate         : Array[0..3] of TDateTime;   // oder Double oder extended ?

begin
  MyVirt_Frei[0] := '07.04.2023';      // virt. Freitage z.B. für Infineon z.B den 06.04.2023 - 03.04. 2023
  MyVirt_Frei[1] := '15.04.2022';      // == börsenfreie Tage
  MyVirt_Frei[2] := '31.12.2021';      // == börsenfreie Tage
  MyVirt_Frei[3] := '24.12.2021';      // == börsenfreie Tage
  MyVirt_Frei[4] := '02.04.2021';
  MyVirt_Frei[5] := '01.01.2021';
  MyVirt_Frei[6] := '25.12.2020';
  MyVirt_Frei[7] := '01.05.2020';
  MyVirt_Frei[8] := '10.04.2020';      // virt. Freitage z.B. für Infineon z.B den 06.04.2023 - 03.04. 2023
  m := 0;                              // wenn 'm:= 0' auskommentiert wird ist ....-->
  For i := 0 to 8 do                   // zu den entsprechenden Freitagen müssen due DAVOR LIEGENDEN 1-4 Tage
  begin                                // herausgefiltert werden
    For k := 0 to 3 do
    begin
     // m := i+k;                      // nur zum testen eingesetzt!!!; wenn 'm:= i+k' aktiv ist
                                        // läuft alles wie es soll !!
      ShowMessage(IntToStr(m));        // -->> ist'm' = 10 !!  sonst = 0
      ADate      := StrToDateTime(MyVirt_Frei[i]);  // fehlender Freitag
      MyADate[k] := (ADate-1);
    end;
  end;
end;
Wenn ich einen Breakpoint bei ADate := StrToDateTime..... setze und m := i+k ist w.o. auskommentiert funktioniert der Braekpoint offensichtlich nicht
(Siehe Bild i = 9,k = 4 !) d.h. die Schleifen laufen durch. Wenn ich die Auskommentierung aufhebe läuft alles korrect.
Wer hat eine Idee bezüglich des seltsamen Verhaltens ?

vielen Dank Wolfgang

peterbelow 14. Apr 2023 16:46

AW: unerklärlicher Fehler
 
Die Zeile

Delphi-Quellcode:
 ADate := StrToDateTime(MyVirt_Frei[i]);
gehört vor die "for k"-Schleife da das Ergebniss nicht von k abhängt. Vermutlich erkennt der Optimiser das und reorganisiert den Kode ohne die Dummy-Statements, was die Anzeige der blauen Dots durcheinanderbringt.

wendelin 14. Apr 2023 19:11

AW: unerklärlicher Fehler
 
Hallo Peter Below,

danke für Deine Antwort.

Ich habe die Zeile m := i+k nur als Dummy reingeschrieben.
Wenn die Zeile fehlt tritt genau dieser Fehler auf.
Wenn die Zeile eingestzt ist(an der 1. Zeile der inneren Schleife) und NICHT auskommentiert ist, tritt kein Fehler auf, der Debugger hält sofort und
die Variablen i und k zeigen '0' an! Wie es sein sollte.

Wolfgang

Uwe Raabe 14. Apr 2023 21:56

AW: unerklärlicher Fehler
 
Wir reden hier über Delphi 7?

wendelin 14. Apr 2023 22:32

AW: unerklärlicher Fehler
 
ja, Delphi 7

Uwe Raabe 14. Apr 2023 22:48

AW: unerklärlicher Fehler
 
Da ich das schon eine gefühlte Ewigkeit nicht mehr verwende und das jetzt auch nicht anfangen werde, kann ich hier nur wenig beitragen. Was mir spontan einfällt: Ist die Optimierung auch ausgeschaltet?

wendelin 14. Apr 2023 23:36

AW: unerklärlicher Fehler
 
Hallo Herr Raabe,

es lag an der Optimierung !! Sie hatten völlig recht.

Vielen Dank für Ihren Tip. Damit hat sich meine Frage erledigt.

Wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz