AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Log Datei

Ein Thema von Walter Landwehr · begonnen am 1. Mär 2015 · letzter Beitrag vom 2. Mär 2015
Antwort Antwort
Seite 1 von 2  1 2      
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#1

Log Datei

  Alt 1. Mär 2015, 13:50
Hallo,

gibt es eine Möglichkeit oder Tool alle Schritte eines Delphi-Programms gerade beim starten in eine Log-Datei zu schreiben?
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#2

AW: Log Datei

  Alt 1. Mär 2015, 15:02
Was verstehst du unter "alle Schritte" und für was würdest du eine solche Logdatei brauchen?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Log Datei

  Alt 1. Mär 2015, 16:01
Hallo, gibt es eine Möglichkeit oder Tool alle Schritte eines Delphi-Programms gerade beim starten in eine Log-Datei zu schreiben?
Klar gibt es die: Du deklarierst eine globale TStringList und erweiterst die zu loggenden Methoden, um via Add den gewünschten Text hinzuzufügen. Nach jedem Add speicherst du die Stringliste via SaveToFile.

Wozu du das benötigst, würde natürlich auch mich interessieren.
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Log Datei

  Alt 1. Mär 2015, 16:22
OK, ich habe beim starten meiner Anwendung im Netz (nur im Netz und nur auf Windows 8.1 Rechner einfach einen Absturz. Das Programm hängt sich auf aber nicht immer.) Ich will einfach herausfinden an welcher Stelle das Problem liegt. Ich habe jetzt gerade eben herausgefunden das beim starten es am lesen aus der registry liegt. Schreib- / Lese- Rechte hat der Benutzer aber.

Ebenso erhalte ich eine Schutzverletzung beim Schließen der Anwendung. (Close)
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#5

AW: Log Datei

  Alt 1. Mär 2015, 17:09
Klar gibt es die: Du deklarierst eine globale TStringList und erweiterst die zu loggenden Methoden, um via Add den gewünschten Text hinzuzufügen. Nach jedem Add speicherst du die Stringliste via SaveToFile.
Das halte ich für keine gute Idee, jedenfalls nicht bei längeren Logs. Denn dann werden massenhaft unnötig Daten auf Platte geschrieben (jedes Mal die komplette StringList statt nur des letzten Eintrags).

Ich verwende für solche Fälle eine eigene, kleine Logger-Klasse, die wahlweise den Logtext in einem Konsolenfenster ausgibt, an OutputDebugString sendet, in eine Textdatei oder eine Html-Datei schreibt. Konsole und Html unterstützen dabei verschiedene Farben, was den Logtext leserlicher machen kann.

OK, ich habe beim starten meiner Anwendung im Netz (nur im Netz und nur auf Windows 8.1 Rechner einfach einen Absturz. Das Programm hängt sich auf aber nicht immer.)
Was bedeutet starten im Netz?
Wenn das Log keine Datei sein muss, dann würde ich dir raten, eine Ausgabe auf Konsole zu probieren.
Dazu einfach AllocConsole aufrufen (erzeugt das Konsolenfester für dein Programm), danach kann dein Programm per WriteLn auf die Konsole schreiben, selbst wenn es eine VCL-Anwendung ist.
Alternativ eben OutputDebugString - dabei bleibt die Ausgabe unsichtbar, du musst ein spezielles Programm wie den Delphi-Debugger oder DebugView benutzen, um sie zu sehen.

Geändert von SMO ( 1. Mär 2015 um 18:53 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Log Datei

  Alt 1. Mär 2015, 18:06
Klar gibt es die: Du deklarierst eine globale TStringList und erweiterst die zu loggenden Methoden, um via Add den gewünschten Text hinzuzufügen. Nach jedem Add speicherst du die Stringliste via SaveToFile.
Das halte ich für keine gute Idee, jedenfalls nicht bei längeren Logs. Denn dann werden massenhaft unnötig Daten auf Platte geschrieben (jedes Mal die komplette StringList statt nur des letzten Eintrags).

Ich verwende für solche Fälle eine eigene, kleine Logger-Klasse, die wahlweise den Logtext in einem Konsolenfenster ausgibt, an OutputDebugString sendet, in eine Textdatei oder eine Html-Datei schreibt. Konsole und Html unterstützen dabei verschiedene Farben, was den Logtext leserlicher machen kann.
Es geht doch hier nicht darum, die perfekteste Logger-Klasse zu schreiben, sondern um schnell mal ein Problem zu lösen. Aber du hast sicher keine Einwände, deine hochexquisite Loggerklasse hier zur Verfügung zu stellen, damit dem armen Walter schnell geholfen werden kann.

Was ist dagegen einzuwenden, wenn der Debugger nicht zum gewünschen Ergebnis führt? Und was ist dagegen einzuwenden, zu Testzwecken jede Änderung der Stringliste sofort zu speichern? Nach dem Absturz kann man die Stringliste wohl eher nicht mehr speichern und alle hinzugefügten Zeilen stehen irgendwo im Speicher. Vielleicht hast du ja ein Tool, um die danach schnell aufzufinden?

Was bedeutet starten im Netz?
Was kann "starten im Netz" schon anderes bedeuten als eine Exe von einem anderen Rechner aus, ergo über ein Netzwerk zu starten?

Wenn das Log keine Datei sein muss, dann würde ich dir raten, eine Ausgabe auf Konsole zu probieren.
Die beim Absturz der Anwendung natürlich weiterhin sichtbar bleibt, oder doch nicht?

Dazu einfach AttachConsole aufrufen (erzeugt das Konsolenfester für dein Programm), danach kann dein Programm per WriteLn auf die Konsole schreiben, selbst wenn es eine VCL-Anwendung ist.
Alternativ eben OutputDebugString - dabei bleibt die Ausgabe unsichtbar, du musst ein spezielles Programm wie den Delphi-Debugger oder DebugView benutzen, um sie zu sehen.
Alles in allem sehr schnell und effizient durchführbare Lösungsvorschläge, alle Achtung
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Log Datei

  Alt 1. Mär 2015, 18:14
OK, ich habe beim starten meiner Anwendung im Netz (nur im Netz und nur auf Windows 8.1 Rechner einfach einen Absturz. Das Programm hängt sich auf aber nicht immer.) Ich will einfach herausfinden an welcher Stelle das Problem liegt. Ich habe jetzt gerade eben herausgefunden das beim starten es am lesen aus der registry liegt. Schreib- / Lese- Rechte hat der Benutzer aber.
  1. Tritt der Fehler beim Durchsteppen nicht auf?
  2. Was machst du da genau?
  3. Hast du beim Zugriff auf die Registry keine Exception-Behandlung eingebaut?
  4. Tritt der Fehler nur beim Starten von einem anderen Rechner aus auf? Das könnte darauf hinweisen, daß die Registry auf dem anderen Rechner nicht den Erwartungen entspricht, in welcher Richtung auch immer.
Ebenso erhalte ich eine Schutzverletzung beim Schließen der Anwendung. (Close)
Schutzverletzung beim Close deutet meistens darauf hin, daß schon bestimmte Ressourcen weg sind, auf die dann nochmal zugegriffen wird. Hatte ich z.B. gestern, nachdem ich in einem Frame, der auf der Mainform gezeigt wird, einen Beenden-Button unterbrachte. In dessen Ereignisprozedur löste ich ein Ereignis aus, das in der Mainform den Close-Befehl ausführte mit allen dazugerhörigen Aufräumarbeiten, u.a. auch FreeAndNil meines Frames. Zum Rückspringen war dann natürlich nichts mehr da, und das ergab dann die Schutzverletzung beim Beenden. War mir eigentlich sofort klar, nachdem ich das einmal ausprobiert hatte
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Log Datei

  Alt 1. Mär 2015, 18:49
Danke Perlsau,

Dein Tipp hat zum erhofften Erfolg geführt. Nun konnte ich mit Hilfe der Log Datei den Fehler analysieren und beheben. Hier ging es wirklich nur um den einmaligen Test von einem Netzwerk-User aus.

Besten Dank nochmals.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#9

AW: Log Datei

  Alt 1. Mär 2015, 18:55
Es geht doch hier nicht darum, die perfekteste Logger-Klasse zu schreiben, sondern um schnell mal ein Problem zu lösen. Aber du hast sicher keine Einwände, deine hochexquisite Loggerklasse hier zur Verfügung zu stellen, damit dem armen Walter schnell geholfen werden kann.
Könnte ich machen, aber dann hättest ja auch du Zugriff darauf und das kannst du dir jetzt dank deiner pflaumigen Antwort abschminken!
Wenn Walter sie möchte kann er mir eine PN schreiben, aber das hat sich wohl erledigt.

Was ist dagegen einzuwenden, wenn der Debugger nicht zum gewünschen Ergebnis führt?
Walter hat nichts über den Debugger gesagt. Vielleicht kann er ihn gar nicht einsetzen, daher auch meine Frage wegen "starten im Netz".

Und was ist dagegen einzuwenden, zu Testzwecken jede Änderung der Stringliste sofort zu speichern? Nach dem Absturz kann man die Stringliste wohl eher nicht mehr speichern und alle hinzugefügten Zeilen stehen irgendwo im Speicher.
Ganz einfach: wenn ein Programm abstürzt kurz nachdem es einen schreibenden Dateizugriff getätigt hat, dann kann es durchaus vorkommen, dass die geschriebenen Daten noch im Pufferspeicher sind und noch nicht auf der Platte gelandet sind. Dorthin schaffen sie es dann auch nicht mehr nach dem Absturz. Das heißt dass die letzten Zeilen fehlen können. Bei deiner Methode, die die Logdatei jedes Mal komplett löscht und neu schreibt können somit auch wesentlich mehr als nur die letzten Zeilen fehlen, nämlich alle. Das muss nicht passieren, aber es kann.

Alles in allem sehr schnell und effizient durchführbare Lösungsvorschläge, alle Achtung
Wie ich sehe hast du dir die zweite Hälfte deines Benutzernamens redlich verdient.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: Log Datei

  Alt 1. Mär 2015, 20:32
Danke Perlsau,
Dein Tipp hat zum erhofften Erfolg geführt. Nun konnte ich mit Hilfe der Log Datei den Fehler analysieren und beheben. Hier ging es wirklich nur um den einmaligen Test von einem Netzwerk-User aus.
Das war mir gleich klar, daß du keine aufwendige Logging-Klasse installieren oder gar selber basteln wolltest

Besten Dank nochmals.
Freut mich & keine Ursache, wir helfen hier doch alle gerne

Alles in allem sehr schnell und effizient durchführbare Lösungsvorschläge, alle Achtung
Wie ich sehe hast du dir die zweite Hälfte deines Benutzernamens redlich verdient.
.

Verstehe ich nicht. Könntest du das bitte etwas näher erläutern? Welches ist denn deiner Ansicht nach die zweite Hälfte meines Benutzernamens, der sich tatsächlich von der Au der Perle ableitet? Du meintest das "Au"? Tut dir was weh?

Und wie hätte ich mir diesen Nickname angeblich "redlich verdient"? Ich habe mir diesen Namen ganz im Gegenteil ohne jegliches Verdienst selbst ausgesucht, er wurde mir auch von niemanden als Bezahlung oder Entgelt zugewiesen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 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