Entwickler-Ecke

Sonstiges (Delphi) - Pfad einer Unit wird in exe gespeichert


rushifell - So 30.12.12 22:38
Titel: Pfad einer Unit wird in exe gespeichert
Hallo,

ich habe es schon öfter bei Fremdunits erlebt, dass beim Kompilieren der komplette Dateipfad der entsprechenden Unit in der exe gespeichert wird (u.a. z.B. bei den Tnt-Unicode-Controls). Gibt es einen Schalter mit dem man das Speichern dieses Pfades in der exe aktivieren/deaktivieren kann? Welchen Sinn macht es überhaupt, dass der komplette Pfad gespeichert wird?

Viele Grüße


Mathematiker - So 30.12.12 22:59

Hallo,
das Speichern des kompletten Pfads dieser Unit wird durch den Befehl Assert() ausgelöst.
Entfernst Du alle Assert (so weit Du das verantworten kannst), verschwindet auch der Unit-Pfad.
Du kannst natürlich auch in den Compiler-Optionen "Assertion" ausschalten.

Beste Grüße
Mathematiker

Nachtrag: Ich habe in einer eigenen Unit, die nichts macht als eine Info anzeigen,

Delphi-Quelltext
1:
assert(x=0,'sinnlos');                    

eingefügt und schon befindet sich in der Exe der ganze Unit-Pfad.


rushifell - So 30.12.12 23:26

Danke! Genau das wars :-)
Wofür wird denn Assert genau benötigt, zum Debuggen?

Zitat:
Since assertions are not usually used in final product version, Delphi compiler includes directives to disable the generation of assertion code:

$ASSERTIONS ON/OFF (long form)

So geht es noch einfacher:


Delphi-Quelltext
1:
2:
3:
Unit ...;

{$ASSERTIONS OFF}


Gruß


Mathematiker - So 30.12.12 23:30

Hallo,
user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
Wofür wird denn Assert genau benötigt, zum Debuggen?

Relativ gut beschrieben ist es unter http://de.wikipedia.org/wiki/Assertion_(Informatik).

Beste Grüße
Mathematiker


rushifell - Mo 31.12.12 15:20

Mathematiker hat folgendes geschrieben:
Entfernst Du alle Assert (so weit Du das verantworten kannst), verschwindet auch der Unit-Pfad.

Bzgl. dem "so weit Du das verantworten kannst": Im Grunde dürfe eigentlich nichts weiter passieren, wenn ich die Assertions einfach deaktiviere. Die Assertion zeigt eine spezifische Fehlermeldung, ohne Assertion wird eine unspezifische Fehlermeldung angezeigt, oder das Programm hängt sich auf. Die Wahrscheinlichkeit, dass bei einer Assertion ein Fehler auftritt, sollte sowieso sehr gering sein:
wikipidia hat folgendes geschrieben:
Fehlerbehandlungen sollten für Fehlerzustände geschrieben werden, welche man erwartet; Zusicherungen für Fehlerzustände die niemals auftreten sollten.


Mathematiker - Mo 31.12.12 15:27

user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
Im Grunde dürfe eigentlich nichts weiter passieren, wenn ich die Assertions einfach deaktiviere.

Da wird auch nichts geschehen.
Meine Bemerkung zielte auf Fremdunits ab. Entfernst Du dort Teile, und seien es nur Assertions, und Du gibst evtl. die Quellen weiter, dann setzt es gegebenenfalls (berechtigterweise) "Hiebe" vom Urheber.
Hatte ich hier schon in der EE. :oops:

Beste Grüße
Mathematiker


rushifell - Mo 31.12.12 15:53

Mathematiker hat folgendes geschrieben:
Meine Bemerkung zielte auf Fremdunits ab. Entfernst Du dort Teile, und seien es nur Assertions, und Du gibst evtl. die Quellen weiter, dann setzt es gegebenenfalls (berechtigterweise) "Hiebe" vom Urheber.

Ach, so hast Du das gemeint. Keine Sorge, da bin ich vorsichtig und achte auf die Lizenz. Die Unit, die ich verwende steht übrigens unter der Mozilla Public License 1.1. Unter dieser Lizenz darf ich den Quellcode ändern. Grundsätzlich würde ich jedoch nie eine modifizierte Unit ohne das Original weitergeben und außerdem immer darauf hinweisen, was ich geändert habe.

Viele Grüße