AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Delphi 12 Debug dcu's ungleich Source?
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 12 Debug dcu's ungleich Source?

Ein Thema von Rolf Frei · begonnen am 30. Jun 2024 · letzter Beitrag vom 1. Jul 2024
Antwort Antwort
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#1

Delphi 12 Debug dcu's ungleich Source?

  Alt 30. Jun 2024, 14:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Delphi 12 Debug dcu's ungleich Source?

  Alt 30. Jun 2024, 17:12
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Delphi 12 Debug dcu's ungleich Source?

  Alt 30. Jun 2024, 17:55
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.

Geändert von Rolf Frei (30. Jun 2024 um 18:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi 12 Debug dcu's ungleich Source?

  Alt 30. Jun 2024, 18:24
Hast du in der Debug-Konfiguration das "Mit Debug-DCUs" aktiv? Falls ja, klappt es wenn du das abschaltest?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Delphi 12 Debug dcu's ungleich Source?

  Alt 30. Jun 2024, 21:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi 12 Debug dcu's ungleich Source?

  Alt 30. Jun 2024, 23:15
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: {$P+,S-,W-,R-,T-,H+,X+,O+,Q-,D0,L-,Y-} Funktioniert auch mit und ohne Debug-DCUs.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Delphi 12 Debug dcu's ungleich Source?

  Alt 1. Jul 2024, 03:39
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 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.
$2B or not $2B

Geändert von himitsu ( 1. Jul 2024 um 03:53 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Delphi 12 Debug dcu's ungleich Source?

  Alt 1. Jul 2024, 13:52
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.

Am Anfang der Vcl.Controls gibt es eine Zeile mit Compilerswitches. Ändere die mal auf diese Werte: {$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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Delphi 12 Debug dcu's ungleich Source?

  Alt 1. Jul 2024, 16:33
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#10

AW: Delphi 12 Debug dcu's ungleich Source?

  Alt 1. Jul 2024, 16:46
Hätten sie die Release- und Debug-DCUs nicht mit den gleichen Optionen compiliert, würde mein SelectiveDebugging Plugin nicht funktionieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 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