Ich möchte die Map-Datei als Ressource hinzufügen, dann extrahiere die Datei jedes Mal, wenn das System ausgeführt wird, um sicherzustellen, dass die Map-Datei immer richtig ist, und die Lebensdauer des Supports zu erleichtern. In Delphi 7 kann ich das Projekt mit der Map-Datei als Ressource kompilieren, aber die Map ist falsch, denn wenn eine Ausnahme ausgelöst wird, ist der Call-Stack falsch. In Delphi Seattle kann ich nicht einmal kompilieren, weil es versucht, die Ressource vor dem Generieren der Karte hinzuzufügen. Ich weiß, dass ich die Datei in einem Post-Compile thask hinzufügen kann, aber gibt es eine Möglichkeit, es in der Kompilierung/Bauzeit zu tun? Sorry, wenn ich nicht sehr genau bin, das ist meine erste Frage hier. Vielen Dank.Gibt es eine Möglichkeit, .map-Datei als Ressource des Projekts beim Kompilieren hinzuzufügen?
UPDATE
Nachdem ich ein paar Antworten zu lesen, habe ich einige der Forschung. Ich habe bereits die JEDI-Ausnahmeeinheit in meinem Projekt verwendet, aber ich kannte den JEDI-Debug-Experten nicht. Es macht genau das, was ich will und mehr. JEDI Debug Experte konvertieren eine. Map-Datei in. JDBG-Datei, die eine verschlüsselte Datei der Karte ist (Karte ist nur eine Textdatei). Auch die JDBG-Datei ist etwa 12% kleiner dann die Karte. Es hat auch die Optionen zu fügen Sie die JDBG in binäre (exe). Um das zu tun, aktivierte ich die Optionen:
Projekt -> JCL Debug-Experten -> Generieren .jdbg Dateien -> Aktiviert für dieses Projekt
Projekt -> JCL Debug-Experte -> Einfügen jdbg Daten in binären -> JCL Debug-Experten - -> löschen map-Dateien nach der Konvertierung -> für dieses Projekt
Projekt freigegeben> für dieses Projekt aktiviert (wenn Sie die Datei, natürlich löschen mögen)
Um dieses Tool außerhalb der IDE zu verwenden, musste ich beispielsweise mit Jenkins das Projekt erstellen, das in JEDI \ jcl \ examples \ windows \ debug \ tools \ MakeJclDbg.dpr verfügbar ist. Nach dem Build wird die exe-Datei im bin-Verzeichnis von jcl erzeugt. Wie zu verwenden:
MakeJclDbg -J -E -M map_filename
J - .JDBG Dateien erstellen
E - Insert Debug-Daten in ausführbare Dateien
M - MAP-Datei nach der Konvertierung
LöschenAusführbare Dateien müssen sich im selben Verzeichnis wie die MAP-Dateien befinden. Dies erstellt die jdbg-Datei (basierend auf der Map-Datei), fügt sie in die exe ein und löscht die Map. Mit diesem (und mit der Ausnahmeeinheit von JEDI), wenn eine Ausnahme ausgelöst wird, steht es mir die Stack-Trace, die Versionen aller vom System verwendeten DLLs, Betriebssysteminformationen und mehr zur Verfügung, und sende auch all dies an ein Email.
Ich erkannte, dass Embarcadero auch jdbg-Dateien von ihnen bpl haben, so denke ich, dass sie auch JCL-Tool verwenden.
@Jerry: Was * Code *? Die Frage fragt nach dem Hinzufügen einer ** Ressource ** zur ausführbaren Datei. Es ist kein Code beteiligt. Es ist eine Map-Datei, die vom Linker generiert wird, wenn die ausführbare Datei erstellt wird. –
@Jerry: Nein. Sie können es auch über die Befehlszeile oder ein Post-Build-Ereignis mit Brcc oder MS RCC hinzufügen. Aber selbst wenn Sie die IDE darum bitten, ist es immer noch kein Code; Es ist eine Compiler-Direktive, die eine einfache '{$ R filename.ext}' –
@Rodrigo: JEDI hat die Fähigkeit, die Map-Datei in die ausführbare Datei für Sie einzubetten, und eine Debug-Einheit, die Sie direkt in Ihrer App verwenden können es ohne es auf die Festplatte zu extrahieren. Andere Debugging-Tools (wie MadExcept und Eureka) haben ebenfalls die gleiche Funktionalität. Es ist viel einfacher, einen von ihnen zu verwenden, anstatt selbst zu rollen. –