Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Selbst erstellte Komponente vom debugging ausschließen (https://www.delphipraxis.net/144722-selbst-erstellte-komponente-vom-debugging-ausschliessen.html)

hoschixv 15. Dez 2009 07:46


Selbst erstellte Komponente vom debugging ausschließen
 
Hallo zusammen,

ich habe mir eine eigene Komponente erstellt. Wenn ich diese benutze und den debugger laufen habe, komme ich jedesmal in diese Klasse rein und debugge alle
selbst implementierten funktionen darin.

Die meisten von euch kennen wahrscheinlich die prozedur "WriteString" von den inifiles um Daten in einem .ini-file zu speichern. Man ruf diese
Prozedur wie folgt auf:
var ini : Tinifile;
ini.WriteString('SECTION', 'IDENT', 'VALUE');

Wenn man diesen Befehl debuggt, dann sieht man nur diesen Befehl, nicht aber das eigentlich Coding Schritt für Schritt, wie es in den inifiles deklariert wurde.

procedure TIniFile.WriteString(const Section, Ident, Value: string);
begin
if not WritePrivateProfileString(PChar(Section), PChar(Ident),
PChar(Value), PChar(FFileName)) then
raise EIniFileException.CreateResFmt(@SIniFileWriteError , [FileName]);
end;

Nun die Frage, ist es möglich irgendeinen "zusatz" in dieser Unit zu deklarieren, damit man nicht beim debuggen in dieser landet, ein Compilerschlüssel o.ä.

Vielen Dank,

Gruß Hoschixv

Corpsman 15. Dez 2009 07:51

Re: Selbst erstellte Komponente vom debugging ausschließen
 
Also normalerweise machst du ja beim Schritt für schritt Debugger F8 und das geht nicht in die Subprozeduren rein, mit F7 kommst du rein, und gehst dann schritt für Schritt durch die Unterprozedur.

Übrigens, ist nicht in allen Delphi Versionen der Source komplett dabei ( So viel ich weis erst ab den Pro Versionen ). Ich bin mir daher nicht sicher, ob du den WriteString Code überhaupt veröffentlichen darfst, nimm es lieber wieder raus, bevor sich da jemand auf den Schlips getreten fühlt, deine Frage versteht man ja auch so.

mjustin 15. Dez 2009 08:10

Re: Selbst erstellte Komponente vom debugging ausschließen
 
Um Units vom Debugging auszuschliessen, einfach den Quelltext an eine Stelle verschieben, die nicht im Projektpfad oder im Browse- (Such-)pfad liegt. Nur die kompilierten Units der Komponente müssen im Bibliothekspfad oder im Projektverzeichnis liegen.

* Library Path (Bibliothekspfad): da wo die kompilierten Units liegen
* Browsing Path (Suchpfad): Verzeichnisse mit den Quelltexten die man während des Debuggings sehen will

Cheers,

himitsu 15. Dez 2009 08:22

Re: Selbst erstellte Komponente vom debugging ausschließen
 
Zitat:

Zitat von mjustin
Um Units vom Debugging auszuschliessen, einfach den Quelltext an eine Stelle verschieben,

das halte ich für etwas unpraktisch.

Lösung: einfach die Units der Komponente ohne Debuginformattionen kompilieren


einfach dieses an den Anfang der Units, welche nicht gedebuggt werden sollen
Delphi-Quellcode:
{$DEBUGINFO     OFF}
{$DEFINITIONINFO OFF}
{$LOCALSYMBOLS  OFF}

// oder in Kurz

{$D-,Y-,L-}

hab in meinem himXML z.B. alles in eine Include-Datei verlagert, welche im Prinzip dieses enthält
Delphi-Quellcode:
{$ALIGN           4}
{$BOOLEVAL      OFF}
{.EXTENDEDSYNTAX ON}  // global
{.FINITEFLOAT    ON}  // global
{.IMPORTEDDATA  OFF}
{$LONGSTRINGS    ON}
{$METHODINFO    OFF}
{$MINENUMSIZE     1}
{$OPENSTRINGS    ON}
{$OPTIMIZATION   ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS   OFF}
{$STACKFRAMES   OFF}
{$TYPEDADDRESS  OFF}
{$TYPEINFO      OFF}
{$WRITEABLECONST OFF}
{$IF CompilerVersion >= 20.0}
  {$POINTERMATH   OFF}
  {$STRINGCHECKS  OFF}
{$IFEND}
{$IFDEF hxDebugable}
  {$DEBUGINFO     ON}
  {$DEFINITIONINFO ON}
  {$LOCALSYMBOLS  ON}
{$ELSE}
  {$DEBUGINFO     OFF}
  {$DEFINITIONINFO OFF}
  {$LOCALSYMBOLS  OFF}
{$ENDIF}
Am Ende sieht man die "Verwaltung" der Debuginformationen und nur wenn hxDebugable z.B. in den Projektoptionen definiert ist, dann kann man die Units debuggen, wo diese Datei eingebunden ist.
So macht sich auch die spätere Fehlersuche besser, da es sich leicht umstellen läßt und man beim veröffentlichen der Units nicht aufpassen muß, daß man diese Option nicht vergißt umzustellen, da diese Einstellungen immer nur (projekt)-lokal sind :-D

und nebenbei ist auch sichergestellt, daß gewisse andere Compileroptionen einem gewissen Standard entspricht.

Bernhard Geyer 15. Dez 2009 08:28

Re: Selbst erstellte Komponente vom debugging ausschließen
 
Zitat:

Zitat von himitsu
Lösung: einfach die Units der Komponente ohne Debuginformattionen kompilieren

einfach dieses an den Anfang der Units, welche nicht gedebuggt werden sollen
Delphi-Quellcode:
{$DEBUGINFO     OFF}
{$DEFINITIONINFO OFF}
{$LOCALSYMBOLS  OFF}

Falls es nicht nur eine Unit ist dann ist es praktischer mit Include-Dateien zu arbeiten um das Debugging zentral Steuern zu können. Praktisch jede Komponentensammlung macht das.

himitsu 15. Dez 2009 08:32

Re: Selbst erstellte Komponente vom debugging ausschließen
 
Zitat:

Zitat von Bernhard Geyer
Falls es nicht nur eine Unit ist dann ist es praktischer mit Include-Dateien zu arbeiten um das Debugging zentral Steuern zu können. Praktisch jede Komponentensammlung macht das.

Jupp, hab ich auch grad noch dazueditiert :lol:

Aber im Prinzip kann man es auch in die Unit direkt reinmachen ... zumindestens bei der Methode es über die Projektoptionen zu steuern, lassen sich auch mehrere Stellen umstellen,
aber in einer getrennten INC läßt sich auch mal was ändern, wenn man mehrere Optionen überall gleich haben möchte.

PMM 15. Dez 2009 09:30

Re: Selbst erstellte Komponente vom debugging ausschließen
 
Was mir da immer wieder fehlt, ist ein Möglichkeit, nur das Ermitteln der Parameter zu überspringen, was ja oft in eine Reihe von Stringoperationen der RTL führt, bei denen man nicht mal so ohne weiteres sieht wo diese genau beendet werden...
Kennt da jemand einen Trick?
PMM

himitsu 15. Dez 2009 10:07

Re: Selbst erstellte Komponente vom debugging ausschließen
 
Du könntest die entsprechenden Befehler statt mit F7 (Einzelschritt) mit F8 (Prozedurschritt) debuggen.

PMM 15. Dez 2009 10:51

Re: Selbst erstellte Komponente vom debugging ausschließen
 
Das funktioniert leider nicht. Wenn du einmal mit F7 in der Parameterübergabe bist, dann kannst du mit dem folgenden F8 zwar ein noch weiteres "Absteigen" vermeiden, aber die einzelnen Schritte der Parameterübergabe muss du durchlaufen :( - wenn du direkt F8 benutzt, kommst du nicht in deine Zielfunktion..
PMM


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz