Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Codeoptimierung lieber abschalten (https://www.delphipraxis.net/212195-codeoptimierung-lieber-abschalten.html)

Andreas13 4. Jan 2023 12:12

AW: Codeoptimierung lieber abschalten
 
Zitat:

Zitat von Benmik
Delphi-Quellcode:
{$IFDEF DEBUG}
  {$OPTIMIZATION OFF}
{$ENDIF}

Ist das nicht zu riskant? Wir unterdrücken damit eventuelle Fehler im Debug-Modus, lassen sie jedoch in der endgültigen Release-Version zu... :gruebel:
Grüße, Andreas

dummzeuch 4. Jan 2023 12:55

AW: Codeoptimierung lieber abschalten
 
Zitat:

Zitat von Andreas13 (Beitrag 1516977)
Zitat:

Zitat von Benmik
Delphi-Quellcode:
{$IFDEF DEBUG}
  {$OPTIMIZATION OFF}
{$ENDIF}

Ist das nicht zu riskant? Wir unterdrücken damit eventuelle Fehler im Debug-Modus, lassen sie jedoch in der endgültigen Release-Version zu... :gruebel:

Aber wir haben doch gerade von allen Seiten gehört, dass der Compiler beim Optimieren keine Fehler macht. Selbst mein Hinweis, dass ich solche Fehler schon mehrfach gesehen habe, wurde abgebügelt mit "das Problem war bestimmt in Deinem Code" (nicht dass das falsch wäre, schließlich war es mein Code, der optimiert wurde, ohne ihn wäre kein Fehler aufgetreten, aber es ist nicht hilfreich). :wall:

OK, ernsthaft: Das mache ich auch so, allerdings nicht durch ifdef im Sourcecode sondern durch Setzen der Option in der Release-Config. Das ifdef hat den Nachteil, dass es nicht so simpel ist, die Optimierung einzuschalten, weil man dafür den Sourcecode ändern muss.

Uwe Raabe 4. Jan 2023 13:02

AW: Codeoptimierung lieber abschalten
 
Zitat:

Zitat von dummzeuch (Beitrag 1516979)
Das ifdef hat den Nachteil, dass es nicht so simpel ist, die Optimierung einzuschalten, weil man dafür den Sourcecode ändern muss.

Der gravierendste Nachteil ist aber wohl, dass es in jeder Unit stehen muss.

jaenicke 4. Jan 2023 13:03

AW: Codeoptimierung lieber abschalten
 
Zitat:

Zitat von dummzeuch (Beitrag 1516979)
Selbst mein Hinweis, dass ich solche Fehler schon mehrfach gesehen habe

Ich habe dazu lediglich geschrieben, wie meine Erfahrungen mit solchen Meldungen waren. Das heißt nicht, dass das bei dir kein Compilerfehler war.

Konkrete Beispiele fände ich aber interessant.

Uwe Raabe 4. Jan 2023 13:28

AW: Codeoptimierung lieber abschalten
 
Zitat:

Zitat von jaenicke (Beitrag 1516981)
Konkrete Beispiele fände ich aber interessant.

Da kann ich mich nur anschließen! Zum einen kann man testen, ob es im aktuellen Delphi noch vorhanden ist, und zum anderen einen Bugreport schreiben, damit es behoben werden kann.

dummzeuch 4. Jan 2023 13:48

AW: Codeoptimierung lieber abschalten
 
Zitat:

Zitat von jaenicke (Beitrag 1516981)
Konkrete Beispiele fände ich aber interessant.

Hm, ich habe gerade mal den Sourcecode unserer internen Bibliothek nach {$OPTIMIZATION OFF} ge-grep-t. Das einzige Beispiel, das ich dort gefunden habe ist etwas zu komplex, um es hier sinnvoll posten zu können:

Delphi-Quellcode:
finally
// Wenn Optimization on ist, gibt es in Delphi 2007 eine AccessViolation in TLaserData.Done bei
// der Freigabe von FReader. Ohne passiert das nicht.
// -- 2021-04-16 twm
{$OPTIMIZATION OFF}
    for LaserNo := Low(LaserData) to High(LaserData) do
      LaserData[LaserNo].Done;
    FreeAndNil(TrigStream);
    FreeAndNil(OutStream);
  end;
  Result := FRes;
end;
{$IFDEF OPTIMIZATION_IS_ON}
// Ab hier kann man Optimization wieder einschalten. Frueher - also z.B. direkt nach der
// for-schleife ging es nicht.
// -- 2021-04-16 twm
{$OPTIMIZATION ON}
{$ENDIF}

procedure TLaserData.Done;
begin
  FreeAndNil(FReader);
end;
Das sagt ziemlich wenig, ohne den Rest der Methode, aber selbst wenn ich die hier poste könnte, wäre sie ohne Kontext nur sehr schwer verständlich. Laserdata ist ein Array of TLaserData-Records, die optional initialisiert werden, wenn es die entsprechenden Dateien gibt. FReader wurde vor dem zugehörigen try mit NIL initializiert.

Andere Beispiele (ich meine es waren noch zwei weitere), finde ich nicht, die müssen im Source von einzelnen internen Tools gewesen sein, und davon haben wir zuviele um den mal eben zu grep-en.

Obiges Beispiel kann ich noch nicht auf Delphi 10.2 portieren, da es immernoch einen Rechner mit Windows XP gibt, auf dem es laufen muss, deshalb weiß ich nicht, ob der Fehler dort noch auftreten würde.

Sherlock 4. Jan 2023 14:01

AW: Codeoptimierung lieber abschalten
 
Also ich kann nur sagen, ich benutze die Optimierung immer und bin bisher noch nicht damit gegen eine Wand gefahren. Aber natürlich gibt es immer und überall Fehler, darum testet man ja - sowohl automatisiert als auch mit Menschen.

Hier mal ein paar Beispiele wie Fehler zu handhaben sind:
https://quality.embarcadero.com/browse/RSP-16456
https://quality.embarcadero.com/browse/RSP-34668
https://quality.embarcadero.com/browse/RSP-13831


Sherlock

Benmik 4. Jan 2023 15:44

AW: Codeoptimierung lieber abschalten
 
Zitat:

Zitat von Andreas13 (Beitrag 1516977)
Ist das nicht zu riskant? Wir unterdrücken damit eventuelle Fehler im Debug-Modus, lassen sie jedoch in der endgültigen Release-Version zu...

Ich hatte bisher ja noch nie von diesen Compiler-Fehlern gehört und um die Relevanz wird hier ja auch etwas gestritten. Was ich damit erreichen möchte, ist, dass ich nicht vergesse, die Optimierung wieder einzuschalten, was für mich persönlich das größere Problem ist. Uwe hat recht, dass man das in jede Unit eintragen muss; da es bei mir aber nahezu die Regel ist, dass mich die Optimierung schwerst beim Debuggen stört, steht das tatsächlich in sehr vielen Units drin. Aber man lernt ja dazu, zum Beispiel durch
Zitat:

Zitat von dummzeuch (Beitrag 1516979)
... durch Setzen der Option in der Release-Config.


himitsu 4. Jan 2023 15:49

AW: Codeoptimierung lieber abschalten
 
Einfach noch eine Config hinzufügen?

Release
Debug (wie Release, nur ohne Debuginfos)

Und dann kann man nochmal davon ableiten und Varianten mit/ohne Codeoptimierung hinzufügen,
oder, wie bereits erwähnt, dann das wenigstens in beiden Configs abschalten, damit man auch das debuggt, was auch der Kunde bekommt.

Alternativ mit externen Debuginfos kompilieren ... jenachdem ob die Debuginfodateien (TDS) daneben liegen, ist es mit oder ohne, aber die Programmdateien selber sind immer identisch.

TomyN 4. Jan 2023 16:41

AW: Codeoptimierung lieber abschalten
 
Ich meine gehört zu haben :?, dass im Optimierungsfalle Schleifen ggf. in die andere Richtung abgearbeitet werden, was zu 'Seiteneffekten' führen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr.
Seite 2 von 3     12 3      

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