Entwickler-Ecke

Programmierwerkzeuge - Dateigröße der erstellten EXE-Datei


Metschu - Sa 26.11.11 19:35
Titel: Dateigröße der erstellten EXE-Datei
Nochmal nabends :)

Ich hab ein etwas umfangreicheres Programm in Delphi 7 geschrieben, welches um die 3,6 MB hat. Dies blieb auch so, nachdem ich es mit Delphi XE2 komplett überarbeitet habe.

Nun habe ich ein neues Project erstellt, was schon 7 MB groß ist, und dabei ist hier nur eine Form, ohne inhalt und Quelltext...
Ist das bei XE normal oder muss ich da noch irgendwas einstellen?

Danke schonmal!

Gruß

Torsten


jaenicke - Sa 26.11.11 20:11

Wenn du in der Projektverwaltung die Buildkonfiguration auf Release umstellst, ist es kleiner, dafür hast du auch keine Debuginfos mehr drin.


AndyB - Sa 26.11.11 21:24

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
auf Release umstellst

Es reicht schon aus, wenn man bei der Debug-Konfiguration die Projekt/Optionen/Linken/Debug-Informationen auf False stellt. Dann werden keine TurboDebugger Symbole (tds) an die EXE angehängt, die für Delphi vollkommen irrelevant sind, da der Delphi-Debugger seine Informationen aus den *.dcu und *.dcp Dateien zieht und nicht aus den Debug-Symbolen die an die EXE angehängt sind.
Warum Embarcadero diesen Schalter in XE2 auf einmal standardmäßig aktiviert hat, wissen die Götter.


Delphi-Laie - Sa 26.11.11 21:27

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du in der Projektverwaltung die Buildkonfiguration auf Release umstellst, ist es kleiner, dafür hast du auch keine Debuginfos mehr drin.


Reicht das? Soweit ich mich entsinne, rückte ich auch in den Projektoptionen, ich glaube unter "Linker" (oder war es doch unter "Compiler"?), den Debuginformationen mit einem entfernten Häkchen zuleibe.

Substantiell bringt es auch etwas, den Laufzeitinformationen (RTTI) zuleibezurücken, das verkleinert die Compilate nach meiner Erfahrung noch einmal um ca. 30%. Leider ist dazu "Handarbeit" nötig; in Delphi gibt es dazu keine einfach zu-/abschaltbare Option (was auch dem Konzept der vorcompilierten Units widerspräche).


jaenicke - Sa 26.11.11 22:48

user profile iconAndyB hat folgendes geschrieben Zum zitierten Posting springen:
Dann werden keine TurboDebugger Symbole (tds) an die EXE angehängt, die für Delphi vollkommen irrelevant sind, da der Delphi-Debugger seine Informationen aus den *.dcu und *.dcp Dateien zieht und nicht aus den Debug-Symbolen die an die EXE angehängt sind.
Macht das der neue Remotedebugger? Der alte bis XE hat das noch nicht gemacht. :gruebel: Davon abgesehen liefern wir die .dcu Dateien nicht mit, so dass schon das Erstellen eines Stacktraces ohne diese Daten kaum möglich ist ohne dass wir hinterher erst die Einsprungstellen abgleichen müssen.
Zudem macht der neue Remotedebugger das Remotedebugging ja erst wirklich interessant für die breitere Nutzung, insofern macht es schon Sinn das standardmäßig zu aktivieren.

Wir liefern die .exe auch mit vollen Debuginformationen aus und loggen jegliche Meldung, die dem Benutzer angezeigt wird, inklusive Stacktrace. Auf diese Weise kann man ohne großen Aufwand sagen warum eine Meldung kam und im Falle eines Fehlers direkt dort ansetzen.

Und davon abgesehen:
Die Einstellung heißt nun einmal Debug. Und dabei ist die Größe der Exe doch irrelevant, die Daten aber ggf. notwendig. :nixweiss:


AndyB - So 27.11.11 12:20

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Macht das der neue Remotedebugger?

Der RemoteDebugger nutzt die *.rsm Datei, die alle Debugsymbole aus den DCP und DCU enthält. Und die über einen anderen "Linken" Schalter geregelt wird.

Zitat:
Davon abgesehen liefern wir die .dcu Dateien nicht mit, so dass schon das Erstellen eines Stacktraces ohne diese Daten kaum möglich ist

Die Map-Datei ist dafür völlig ausreichend und sie enthält nicht die Variablennamen sämtlicher lokaler und globaler Variablen, die für einen Stacktrace unnötig sind ;-)

Zitat:
Zudem macht der neue Remotedebugger das Remotedebugging ja erst wirklich interessant für die breitere Nutzung, insofern macht es schon Sinn das standardmäßig zu aktivieren.

Dafür gibt es den Schalter "Mit externen Debug-Symbolen". Die "Debug-Informationen" sind nur für den BCB-Debugger von Interesse, da er auf dem TDS Format agiert. (an dem ich übrigens gerade stark herumschraube, um den C++Builder Nutzer auch mal ein bisschen mehr Geschwindigkeit zu geben).

Zitat:
Wir liefern die .exe auch mit vollen Debuginformationen aus und loggen jegliche Meldung, die dem Benutzer angezeigt wird, inklusive Stacktrace. Auf diese Weise kann man ohne großen Aufwand sagen warum eine Meldung kam und im Falle eines Fehlers direkt dort ansetzen.

Dito. Nur nutzen wir dafür jdbg Dateien (enhält alle für einen Stacktrace notwendigen Daten aus der Map-Datei und ist komprimiert), die in die EXE gelinked werden. Das geht mit der JCL recht einfach und MadExcept und EurekaLog können die auch verwenden.


Zitat:
Und davon abgesehen:
Die Einstellung heißt nun einmal Debug

Das ist mir schon klar. Aber die Mehrzahl der Entwickler, die sich mit dem Releasen von Software nicht wirklich auseinandergesetzt haben bzw. bei Delphi 7 stehen geblieben sind, liefern immer ihre Debug-EXE Dateien aus.


jaenicke - So 27.11.11 13:25

user profile iconAndyB hat folgendes geschrieben Zum zitierten Posting springen:
Dafür gibt es den Schalter "Mit externen Debug-Symbolen". Die "Debug-Informationen" sind nur für den BCB-Debugger von Interesse, da er auf dem TDS Format agiert.
Ah, ok, das hatte ich ehrlich gesagt nie versucht und zum Remotedebugging immer beide aktiviert. Weil es eh schon so lange dauerte bis das endlich ging, hatte ich da keine Lust zu experimentieren. :D

Nebenbei bei dem Thema:
Kennst du vielleicht eine Möglichkeit unter XE oder XE 2 das Laden eines externen Prozesses auf eine Taste zu legen? Oder muss ich dafür einen eigenen Experten bzw. CnWizards-Skript benutzen?

user profile iconAndyB hat folgendes geschrieben Zum zitierten Posting springen:
Das ist mir schon klar.
Das war mir schon klar. :mrgreen:


BenBE - So 27.11.11 14:18

Und für Leute, die nen brauchbaren Stack-Trace OHNE Ausliefern von Debug-Symbolen haben, gibt es OmMAP, was einem mit Hilfe der Mapfile+Angabe der abzufragenden Pointer.


AndyB - So 27.11.11 14:42

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Nebenbei bei dem Thema:
Kennst du vielleicht eine Möglichkeit unter XE oder XE 2 das Laden eines externen Prozesses auf eine Taste zu legen? Oder muss ich dafür einen eigenen Experten bzw. CnWizards-Skript benutzen?

Tastenkürzel nicht, aber man kann sich das "Prozess laden..." als Icon auf die Toolbar legen.