Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit der JCL Debug Extension (https://www.delphipraxis.net/57835-problem-mit-der-jcl-debug-extension.html)

Flocke 27. Nov 2005 14:26


Problem mit der JCL Debug Extension
 
Ich habe ein Problem mit der JCL Debug Extension, dass mir die Jedi-Profis hier im Board vielleicht erklären können.

In der Datei "Howto.txt" steht u.a.
jcl/examples/vcl/debugextension/Howto.txt
Each executable file in the project can use different option from those listed above.


Das geht bei mir aber absolut nicht. Wenn ich den Haken bei "Insert JCL Debug Data" setze, dann gilt das immer für alle Projekte (und das auch oft erst nach einem Neustart der IDE). Und wenn man sich die "JclOTAUtils.pas" ansieht, dann stellt man fest, dass die Einstellung in der Datei "JediOTA.ini" im Delphi-bin-Verzeichnis abgelegt wird und somit überhaupt nicht projektspezifisch sein kann.

Ich bräuchte aber wirklich eine Unterscheidung auf Projektebene. Ich hatte ja gehofft, dass ich das einfach darüber steuern kann, ob eine MAP-Datei erzeugt wird oder nicht. Der Experte aktiviert die Option "Map-Datei: detailliert" aber jedes Mal wieder von selbst.

Alternativ würde mir natürlich auch ein Tool helfen, mit dem ich die "JCLDEBUG"-Sektion aus der PE-Datei entfernen kann (möglichst per Kommandozeile). Noch besser fände ich den umgekehrten Weg: ein Kommandozeilenzool auf Basis des IDE-Experten, dass die "JCLDEBUG"-Sektion aus dem Mapfile erzeugt, wenn es existiert (zumal man demnächst in D2K6 ja "Aktionen nach dem Build" definieren kann).

Ehe ich jetzt anfange, in den Quellen herumzupatchen, wüsste ich gerne, ob ich hier irgendeine Einstellungsmöglichkeit übersehen oder noch nicht erkannt habe.

Robert Marquardt 27. Nov 2005 16:01

Re: Problem mit der JCL Debug Extension
 
"Map-Datei: detailliert" braucht der Experte damit er ueberhaupt funktionieren kann.
Das MAP file wird entweder direkt verwendet oder komprimiert und an das EXE getackert.

Flocke 27. Nov 2005 16:53

Re: Problem mit der JCL Debug Extension
 
Zitat:

Zitat von Robert Marquardt
"Map-Datei: detailliert" braucht der Experte damit er ueberhaupt funktionieren kann.
Das MAP file wird entweder direkt verwendet oder komprimiert und an das EXE getackert.

Diese Fakten sind mir durchaus bekannt.

Vielleicht habe ich mich oben nicht deutlich genug ausgedrückt: ich suche eine Möglichkeit, das Einbinden der Debug-Daten auf Projektebene steuern zu können.

Ich werde wohl einfach die 5-6 Zeilen in der JclDebugIdeImpl.pas ändern, so dass ich das über das Kennzeichen "Map-Datei: detailliert" steuern kann.

Flocke 27. Nov 2005 23:32

Re: Problem mit der JCL Debug Extension
 
Für alle, die es auch brauchen / haben möchten.

Die folgenden Änderungen an der Datei "jcl\examples\vcl\debugextension\JclDebugIdeImpl.p as" bewirken, dass der Experte die Option "Map-Datei: detailliert" nicht selbstständig abändert sondern statt dessen die Einstellung als (zusätzlichen) Schalter benutzt, ob die JCLDEBUG-Informationen in die Datei eingebunden werden.

Nochmal einzeln:
1. Der Schalter "Projekt" > "Insert JCL debug data" steuert, ob der Experte überhaupt aktiv ist.
2. Ist er aktiv, dann steuert man über "Projekt" > "Optionen..." mit der Einstellung "Map-Datei" auf der Seite "Linker", ob die Debug-Daten wirklich eingebunden werden.
2a. Einstellung "detailliert" -> ja
2b. Andere Einstellung -> nein

Hier ein Unified Diff zur Originalversion (JCL 1.95 aus dem Build 1848). Deaktivierte Zeilen wurde nicht entfernt sondern auskommentiert.
Code:
--- JclDebugIdeImpl.pas.orig   Mon Mar 21 04:04:14 2005
+++ JclDebugIdeImpl.pas   Sun Nov 27 23:11:03 2005
@@ -187,4 +187,6 @@
 begin
   if FInsertDataAction.Checked and Assigned(FCurrentProject) then
+  // VS: added to control the feature on a per-project basis via map file settings
+  if FSaveMapFile = MapFileOptionDetailed then
   begin
     ProjOptions := FCurrentProject.ProjectOptions;
@@ -260,4 +262,5 @@
   if FInsertDataAction.Checked then
   begin
+  { // VS: moved check for installed packages to the bottom
     if IsInstalledPackage(Project) then
     begin
@@ -267,4 +270,5 @@
     end
     else
+  }
     begin
       FCurrentProject := Project;
@@ -273,6 +277,14 @@
       FOptionsModifiedState := ProjOptions.ModifiedState;
       FSaveMapFile := ProjOptions.Values[MapFileOptionName];
+    { // VS: removed to control the feature on a per-project basis via map file settings
       if FSaveMapFile <> MapFileOptionDetailed then
         ProjOptions.Values[MapFileOptionName] := MapFileOptionDetailed;
+    }
+      // VS: moved check for installed packages here
+      if (FSaveMapFile = MapFileOptionDetailed) and IsInstalledPackage(Project) then
+      begin
+        MessageDlg(Format(RsCantInsertToInstalledPackage, [Project.FileName]), mtError, [mbNo], 0);
+        FSaveMapFile := 0;
+      end;
     end;
   end;

MaBuSE 28. Nov 2005 07:15

Re: Problem mit der JCL Debug Extension
 
Zitat:

Zitat von Flocke
Noch besser fände ich den umgekehrten Weg: ein Kommandozeilenzool auf Basis des IDE-Experten, dass die "JCLDEBUG"-Sektion aus dem Mapfile erzeugt, wenn es existiert (zumal man demnächst in D2K6 ja "Aktionen nach dem Build" definieren kann).

Schau Dir mal die Funktion Delphi-Referenz durchsuchenInsertDebugDataIntoExecutableFile an.

Die Funktion komprimirt das map file und hängt es an die Exe an.
Ein detailiertes Map File muß vorhanden sein. Nur in dem detailierten sind die Zeilennummern des Quelltextes zugeordnet.

Es sollte nun ein Leichtes sein, das Passende Programm um diese Funktion zu schreiben.
Viel Spaß

ps: Schau auch mal in die JCL\examples\vcl\debugextention\tools\MapToJdbg.dp r :mrgreen:

Flocke 28. Nov 2005 08:18

Re: Problem mit der JCL Debug Extension
 
Zitat:

Zitat von MaBuSE
Schau Dir mal die Funktion Delphi-Referenz durchsuchenInsertDebugDataIntoExecutableFile an.

Die Funktion komprimirt das map file und hängt es an die Exe an.

Weiß ich.
Zitat:

Zitat von MaBuSE
Ein detailiertes Map File muß vorhanden sein. Nur in dem detailierten sind die Zeilennummern des Quelltextes zugeordnet.

Weiß ich auch :wink:
Zitat:

Zitat von MaBuSE
Es sollte nun ein Leichtes sein, das Passende Programm um diese Funktion zu schreiben.

Mache ich sobald ich es brauche (D2K6? überhaupt?) Wäre als Kommandozeilenprogramm echt ein "Wenigzeiler".

Aber: meine Lösung funktioniert genau so, wie ich es mir gewünscht habe: ich kann das Feature über einen Schalter auf Projektebene ein- und ausschalten. Und wenn ich keine Debug-Infos in der Datei haben will, dann brauche ich auch kein detailliertes Mapfile.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 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