Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Delphi 12 Debug dcu's ungleich Source? (https://www.delphipraxis.net/215423-delphi-12-debug-dcus-ungleich-source.html)

Rolf Frei 30. Jun 2024 13:23

Delphi 12 Debug dcu's ungleich Source?
 
Ich möchte gerne eine Krorektur an der VCL.Controls.pas Unit machen und habe diese dazu in ein separates Verzeichnis kopiert, das ich im globalen Suchpfad von Delphi (Tools/Options) am Anfang in derListe drin habe. Die Praxis nutze ich schon seit Jahren und hatte nie eine Problem damit. Hier in D12 klappt das nur mit der Release Konfiguration. Sobald ich die Debug Konfiguration auswähle, erhalte ich den Fehler

"[dcc32 Fatal Error] ListGen.dpr(20): F2051 Unit Vcl.Grids was compiled with a different version of Vcl.Controls.TWinControl.DisableAlign"

Da scheint mir die dcu im lib\win32\debug nicht mit der Source Version übereinzustimmen!

Der Punkt hier ist, dass DisableAlign als inline deklariert ist und ich frage mich wie die Debug dcus kompiliert sind? Weiss jemand die genaue compilersetting mit denen die lib\win32\debug kompiliert wurden? Ichhabe festgestell, dass wennich in den Einstellungen "CodinInlingenControl" auf Auto stelle, der Fehler weg ist, dann aber eine anderer Fehler auftritt.

"[dcc32 Fatal Error] Vcl.Controls.pas(3441): F2613 Unit 'Vcl.Themes' not found."

Das war noch nie eine Problem in einer früheren Delphiversion.

jaenicke 30. Jun 2024 16:12

AW: Delphi 12 Debug dcu's ungleich Source?
 
Es scheint so zu sein, dass es bei inline-Methoden nicht genügt, wenn das Interface der Unit unverändert ist. Was da intern geprüft wird, weiß ich aber nicht.

Ich habe bisher noch keinen Fall gehabt, den ich nicht ohne ein Kopieren und Ändern einer Unit korrigieren konnte. Klar, kopieren geht am schnellsten, aber ich verwende lieber Hooks usw., so dass ich bei einer neuen Delphiversion nur noch prüfen muss, ob der Fix noch passt und ob er noch benötigt wird. Dafür habe ich in solchen Fällen ein IFDEF drin, das dann einen Fehler auslöst, wenn eine ungeprüfte Delphiversion vorliegt.

Rolf Frei 30. Jun 2024 16:55

AW: Delphi 12 Debug dcu's ungleich Source?
 
Ich mache das ja seit Jahren so und hatte noch nie ein Problem damit. Hier nun scheint es ein Problem zu geben, das eindeutig auf eine andere Debug Source Basis hinweist. In D11 ist der Code identisch (auch inline) und da kann ich die VCL.Controls.pas ohne Probleme kompilieren. In D12 stimmt irgendwas zu 100% nicht überein.

Uwe Raabe 30. Jun 2024 17:24

AW: Delphi 12 Debug dcu's ungleich Source?
 
Hast du in der Debug-Konfiguration das "Mit Debug-DCUs" aktiv? Falls ja, klappt es wenn du das abschaltest?

Rolf Frei 30. Jun 2024 20:28

AW: Delphi 12 Debug dcu's ungleich Source?
 
Macht keinen Unterschied. Geht beides nicht sobald ich die Debug Konfiguration aktiviert habe. Das heisst, sobald die Umgebungsvariable DEBUG aktiv ist, nimmt es ja die DCU aus lib\win32\debug und damit klappt es nicht mehr.

Du kannst das eigentlich auch ganz einfach selber testen:

1. Neues VCL Projekt und eine TDBGrid auf die Form klatschen.
2. Auf dem VCL.Control im Uses der Form1 Unit Ctrl/Enter drücken.
3. Die soeben geöffnete Datei in einem separateen Ordner speichern und diesen im Suchpfad hinzufügen. Ich habe dazu einen globalen "Fixes" Ordner, der in den System Optionen unter Tools/Options im Librarypfad an erster Stelle eingetragen ist. Ich nutzte diese Technik eigentlich seit Delphi 1 und hatte noch nie Probleme, wenn die DCU mit den Sourcen übereinstimmen.

Ein Fullcompile mit dem Release Config sollte problemlos kompilieren und danach im Ooutputdir (bei mir "Fixes" direkt ohne Release/Debug Subdir, da ich diese bei jedem Compile neu erzeugen will) die VCL.Controls.dcu zu finden sein. Dann die Debug Config aktivieren und wieder eine Fullcompile. Hier kommt sofort die Fehlermeldung, wegen der falschen Version.

Uwe Raabe 30. Jun 2024 22:15

AW: Delphi 12 Debug dcu's ungleich Source?
 
Zitat:

Zitat von Rolf Frei (Beitrag 1538417)
sobald die Umgebungsvariable DEBUG aktiv ist, nimmt es ja die DCU aus lib\win32\debug

Das ist so nicht ganz richtig. Das DEBUG hat allenfalls zur Folge, dass das Ausgabeverzeichnis der Units ein anderes ist, wenn es ein $(Config) darin hat. Ob die Debug-Lib verwendet wird, bestimmt ausschließlich die genannte Compiler-Option. Kannst du im Meldungsfenster kontrollieren.

Allerdings funktioniert es halt auch nicht mit den abgeschalteten Debug-DCUs - also muss eine andere Lösung her:

Am Anfang der Vcl.Controls gibt es eine Zeile mit Compilerswitches. Ändere die mal auf diese Werte:
Delphi-Quellcode:
{$P+,S-,W-,R-,T-,H+,X+,O+,Q-,D0,L-,Y-}
Funktioniert auch mit und ohne Debug-DCUs.

himitsu 1. Jul 2024 02:39

AW: Delphi 12 Debug dcu's ungleich Source?
 
Hier entscheidet eher die Option "Debug-DCUs", ob die DCUs der RTL/VCL/FMX aus dem normalen oder dem Debug-Verzeichnis genommen werden.

Für deine "neu kompilierten" Units, da entscheidet natürlich die Config deines Projekts.


WAS hast du geändert?
* nur was "in" Funktionen
* oder was im Interface

Delphi kompiliert standardmäßig gegen die vorkompilierten DCUs, nicht gegen die PAS der RTL/VCL/...

Problem ist somit auch, dass andere Units ja gegen die "originale" PAS DCU kompiliert wurden.
Ändert sich nun was am Interface, dann passen andere Units (DCU) nicht mehr zu der "neuen" Unit, und es knallt nunmal.

Und genau das besagt auch die Fehlermeldung.
Eine Lösung wäre nun, auch jene Unit(s) zu kopieren und neu zu kompilieren.



Natürlich könntest du auch deine "geänderten" Units als RELEASE vorkompilieren
und dann die geänderten DCUs im Suchpfad deines Projektes (nicht die geänderten PAS).
Somit wären auch Jene immer ohne Debuginfos, egal welche Config dein Projekt nutzt.

Mich kotzt ja schon an, dass die "Debug DCUs" standardmäßig aktiv sind.
Drum wöllte ich natürlich auch nicht, dass solche Neukompilate gedebuggt werden. (beim Benutzen in Projekten)

Wer um Himmels willen, mag es wirklich ständig in den System- und VCL-Units zu landen, anstatt im eigenen Code?



PS: Würden PAS direkt im Delphi-Verzeichnis bearbeitet,
dann könnte man es teilweise mit
Delphi-Quellcode:
C:\Program Files (x86)\Embarcadero\Studio\22.0\source\rtl\buildrtl.bat
versuchen,
aber da sich nicht alle Packages, vor allem nicht die DesignTimePackages der IDE, neu kompilieren lassen, landet man hier schnell in der Hölle.

Rolf Frei 1. Jul 2024 12:52

AW: Delphi 12 Debug dcu's ungleich Source?
 
Zitat:

Zitat von himitsu (Beitrag 1538421)
WAS hast du geändert?
* nur was "in" Funktionen
* oder was im Interface

Habe an der Unit noch garnichts geändert. Ist also 1:1 die Source von D12. Anpassungen darf man nicht am Interface machen, das ist mir klar. Die Anpassung käme nur in den Implementationsteil. Und ja. dass dabei meine Compiler Switches der Debug Konfiguration verwendet wird, ist mir auch klar. Daher habe ich auch nachgefragt, ob jemand weiss mit welchen Switches die Delphi DCU's erstellt wurden.

Zitat:

Zitat von Uwe Raabe (Beitrag 1538420)
Am Anfang der Vcl.Controls gibt es eine Zeile mit Compilerswitches. Ändere die mal auf diese Werte:
Delphi-Quellcode:
{$P+,S-,W-,R-,T-,H+,X+,O+,Q-,D0,L-,Y-}

Danke für die Compiler Swiitches. Damit geht es. Genauer gesagt, liegt es am Overflow Checking ($Q+). Sobald diese Option eingeschalten ist, geht es nicht mehr. Die beiden anderen Checks (I/O check, Range check) haben keine Auswirkung aufs Kompilieren und damit geht es, egal ob ein- oder ausgeschaltet.

Das Problem ist, dass defaultmässig in D12 alle 3 Checks im Debug Config aktiv sind und es dadurch zu diesem Problem kommt. Ich glabue fast, dass das Upgrade meines D11 Projekts auf D12 diese Optionen aktiviert hat. Ich habe nähmlich ansonsten nur den I/O check aktiv.

himitsu 1. Jul 2024 15:33

AW: Delphi 12 Debug dcu's ungleich Source?
 
Bei neuen Projekten sind ja die Überlaufprüfung und die Indexprüfung inzwischen standardmäßig aktiv.
Ja, da Delphis eigener Code an vielen Stellen schrottig ist, haben sie es beim Kompilieren des eigenen Projekts (der Delphi IDE, RTL, VCL, uvm.) überall natürlich deaktiviert. :stupid:

Uwe Raabe 1. Jul 2024 15:46

AW: Delphi 12 Debug dcu's ungleich Source?
 
Hätten sie die Release- und Debug-DCUs nicht mit den gleichen Optionen compiliert, würde mein SelectiveDebugging Plugin nicht funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.

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