AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Applikation initialisert "falsche" Unit

Ein Thema von ZOD · begonnen am 8. Jan 2016 · letzter Beitrag vom 8. Jan 2016
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: Applikation initialisert "falsche" Unit

  Alt 8. Jan 2016, 11:06
Sagen wir mal so:

Durch die Uses-Listen wissen wir jetzt, wo was gebraucht werden könnte.

Prinzipiell kann man in die Uses-Liste alle Units einfügen, die man so kennt oder auf der Platte hat.
Dies bedeutet nicht, dass aus diesen Units irgendwo, irgendwas "gebraucht" wird.
Soweit ich das mitbekommen habe, baut Delphi beim Kompilieren letztlich aber nur das zusammen, was auch gebraucht wird. Der Initialisierungsteil einer nicht benötigten Unit wird daher nicht in die Exe übernommen.
(Falls diese Aussage falsch ist, bitte hauen, damit ich mein Halbwissen aufbessern kann.)

Momentan gehe ich davon aus, dass aus der Unit, deren Initialisierungsteil "unerwartet früh" aufgerufen wird, schon irgendwo etwas benötigt wird, bevor die Unit uMainWerk.pas "irgendwie" angepackt wird.

Welche konkrete Verbindung besteht zwischen der Unit uMainWerk.pas und der "zu früh" initialisierten?

Wird da irgendwo im FormCreate schon was aufgerufen?

Mein Vorgehen wäre hier folgendes:

Es muss eine Loggingfunktion (in 'ner Komponente oder so), die in jede projektspezifische Unit eingebunden wird, vorhanden sein.

Alle Loggingeinträge "landen" in einer Datei.
Vor dem Schreiben des Eintrages wird die Datei geöffnet, nach dem Schreiben geschlossen.

In jeder projektspezifischen Unit wird im Initialisierungsbereich eine Zeile mit einem Zeitstempel und dem Namen der Unit in die Logdatei geschrieben.

Hiermit sollte anschließend die Aufrufreihenfolge der projektspezifischen Units "schriftlich" vorliegen.

Mit diesem Wissen kann man dann etwas gezielter die Abhängigkeiten durchforsten.

Prinzipiell hat man ja in jeder Unit zwei Uses-Blöcke, einen im Interface, den zweiten unter Implementation.

Alle Units, die nicht bereits zwingend im Interface bekannt sein müssen, da dort noch keine Abhängigkeiten bestehen, gehören in die Uses-Anweisung unter Implementation, auch dann, wenn Delphi sie automatisch in die Uses-Anweisung des Interface gepackt hat.

Soweit ich das mitbekommen habe, scheint dies auch Auswirkungen auf die Reihenfolge des Ladens der Units zu haben, lasse mich aber gerne eines Besseren belehren, da ich mich mit den Interna nun wirklich nicht so besonders auskenne.

Geändert von nahpets ( 8. Jan 2016 um 11:07 Uhr) Grund: Wieder mal Schreibfehler :-(
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#2

AW: Applikation initialisert "falsche" Unit

  Alt 8. Jan 2016, 14:03
Soweit ich das mitbekommen habe, baut Delphi beim Kompilieren letztlich aber nur das zusammen, was auch gebraucht wird. Der Initialisierungsteil einer nicht benötigten Unit wird daher nicht in die Exe übernommen.
Doch, das ist so. Probier's mal aus: neues Kommandozeilenprojekt anlegen, komplett kompilieren, Größe des Kompilats merken. Dann Unit Classes einbinden, erneut komplett kompilieren, und anschließend die Größe mit der vom ersten Kompiliervorgang vergleichen. Ergebnis: das Kompilat ist mit Unit Classes deutlich größer. Daraus kann man schließen, dass mindestens die initialization-Abschnitte (und alles, was dafür benötigt wird) mit im Kompilat landen. Hat die Unit keine derartigen Abschnitte und es werden auch keine Funktionen aus der Unit irgendwo im Projekt benutzt, dann landet von dieser Unit natürlich nichts im Kompilat.

MfG Dalai
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Applikation initialisert "falsche" Unit

  Alt 8. Jan 2016, 14:17
@Dalai

daraus schließe ich jetzt mal ganz naive, es ist durchaus sinnvoll aus der Uses-Anweisung alle Units rauszuwerfen, die man nicht benötigt (egal, warum auch immer sie da mal reingekommen sein sollten).
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#4

AW: Applikation initialisert "falsche" Unit

  Alt 8. Jan 2016, 14:22
mhm - uses bereinigen ist gut. Gibt es dafür Helferleins?
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.784 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Applikation initialisert "falsche" Unit

  Alt 8. Jan 2016, 14:28
.. vielleicht ist hier die Antwort zu finden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Applikation initialisert "falsche" Unit

  Alt 8. Jan 2016, 14:34
Meine Methode "brutal" ist da immer:

Alles auskommentieren und kompilieren.

Was die IDE dann wieder reintut wird gebraucht und fliegt aus dem Auskommentierten raus.

Dann Kompilieren, wenn was fehlt, meckert der Compiler. Unit dazu wird aus dem Kommentar verschoben zu den Benötigten.

Das wird solange wiederholt, bis der Compiler zufrieden ist. Der Rest kommt weg.

Natürlich kannst Du beim Auskommentieren alles das weglassen, von dem Du sicher bist, dass es benötigt wird.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Applikation initialisert "falsche" Unit

  Alt 8. Jan 2016, 14:36
Hallo,
die Reihenfolge der initializations ist einfach rauszubekommen.
Breakpoint auf das begin in der dpr und dann F7 drücken.

Ich hätte den Code in eine Extra-Unit gepackt und die als erste in beide dpr's eingetragen.


Heiko
Heiko
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Applikation initialisert "falsche" Unit

  Alt 8. Jan 2016, 16:51
Meine Methode "brutal" ist da immer:
...
Sehr zeitaufwendig.
Versuche mal den Uses-Cleaner vom CnPack, siehe auch stackoverflow-Link von Klaus01.
  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 14:29 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