Verlaufsprotokoll eines Programmes

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
WeePee
Beiträge: 25
Registriert: So 8. Dez 2013, 13:46

Verlaufsprotokoll eines Programmes

Beitrag von WeePee »

Hallo,

aufgrund der nichtlinearen Programmierung (Events, Timer, OO) wird es deutlich schwieriger, ein Programm zu debuggen. Daher suche ich nach einer Möglichkeit, den Verlauf eines Programmes zu protokollieren.

Ich denke da an eine Ausgabe wie:

Code: Alles auswählen

 
1.1.2000 20:38:22:345 Methode Class1.method1 ausgeführt
1.1.2000 20:38:22:444 Methode Class1.method2 ausgeführt
....
 
Gibt es eine mögliche Compilereinstellung dafür oder muss ich mir das selbst programmieren?

Liebe Grüße
Wolfram

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Verlaufsprotokoll eines Programmes

Beitrag von Michl »

Für soetwas hatte ich mir eine Statusanzeige gebastelt. Die Basisversion hatte ich hier mal gepostet. Da ich dort SimpleIPC (nutzt auch der Debugger) nutze, ist diese Anzeige Threadsicher und bei einem Absturz des eigenen Programms bleibt die Anzeige sichtbar (eigenständiges Programm). Man kann daher leichter nachvollziehen, wo der Fehler aufgetreten ist.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Verlaufsprotokoll eines Programmes

Beitrag von m.fuchs »

Schau dir auch mal Log4Delphi (http://log4delphi.sourceforge.net/) an. Damit kannst du das ganz vernünftig realisieren. Die Logmeldungen musst du aber selber programmieren.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Verlaufsprotokoll eines Programmes

Beitrag von gocher »

Kommt ganz darauf an auf welcher Klasse Dein Programm aufgebaut ist, z.B. TCustomApplication stell ein EventLog zur Verfügung, da kannst Du dann die Procedure DoLog überschreiben.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

martin_frb
Beiträge: 586
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Verlaufsprotokoll eines Programmes

Beitrag von martin_frb »

In Lazarus gibt es LazLogger.

Code: Alles auswählen

myapp.exe --debug-log=log.txt
 
Oder mit console compilieren, und console output nutzen

Code: Alles auswählen

 
uses  LazLogger / LazLoggerBase
 
debugln(['a',1,dbgs(true)]);
 
debuglnEnter(['a']); // increase indent
debuglnexit;
 
Man kann "uses" zu Unit LazLoggerDummy aendern, and all logging code is inactive (debugln is just an empty proc)

Supports switching on/off individual parts of the log. (search gdbmidebugger, and look in the code for examples / see initialization section.)
--debug-enable=FOOBAR
debugln(FOOBAR, ['aaa', 1]);

NoCee
Beiträge: 174
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Re: Verlaufsprotokoll eines Programmes

Beitrag von NoCee »

Ich mach mit apptype console parallel zum Grafikfenster ein zusatzliches Konsolenfester mit auf.
In diesem werden Ausgaben wie früher einfach mit

Code: Alles auswählen

writeln('1.1.2000 20:38:22:345 Methode Class1.method1 ausgeführt');
geschrieben. Benutze ich recht oft. Für meine einfachen Pprogramme war das bisher absolut ausreichend
und vor allem billig zu machen.
Fuktioniert aber nur unter Win.

Code: Alles auswählen

{$mode objfpc}{$H+}
{$apptype console} 
Gruß
NoCee

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Verlaufsprotokoll eines Programmes

Beitrag von Antrepolit »

WeePee hat geschrieben:Hallo,

aufgrund der nichtlinearen Programmierung (Events, Timer, OO) wird es deutlich schwieriger, ein Programm zu debuggen.(...)
Hmm. Ich arbeite schon seit einigen Jahren als Software-Entwickler und kam mit den vorhandenen Tools wie Breakpoints und Aufrufstack bestens klar. Nur in seltenen, Betriebssystem-nahen Fällen mussten es mal der Processs Explorer, ein Dump File oder der Process Monitor sein, das reichte dann aber auch. Eine derartige Logging-Methode, wie du sie suchst, liefert sehr viel Output für einen sehr geringen Nutzen beim Anwender. Du solltest das Logging in der Endversion deaktivieren. Evtl. hilft die speziell zum Debuggen EurekaLog weiter.
Grüße, Antrepolit

care only if your os is really burning

WeePee
Beiträge: 25
Registriert: So 8. Dez 2013, 13:46

Re: Verlaufsprotokoll eines Programmes

Beitrag von WeePee »

Danke an alle, die geantwortet haben ....

Ich habe mir schnell eine eigene Klasse geschrieben, die die Log-Daten in eine Datei schreibt, wenn das Log angeschaltet ist. Einziger Wermutstropfen ist, dass ich natürlich die Aufrufe der Methoden in das Coding einbauen musste.

Dabei habe ich dann einen (Performance-)Fehler (in meinem Programm) gefunden, den ich vorher - auch durch debuggen - nicht entdeckt hatte, da das Programm erst einmal ein paar Stunden laufen musste, damit der Fehler überhaupt "erkennbar" wird.

Liebe Grüße
Wolfram

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Verlaufsprotokoll eines Programmes

Beitrag von Christian »

Und was hat dir am Eventlog nicht gefallen ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Verlaufsprotokoll eines Programmes

Beitrag von m.fuchs »

Ich antworte jetzt mal, obwohl ich nicht gefragt bin. Für mich hatte TEventLog immer den Nachteil, dass es keine Flush-Möglichkeit gibt. Wenn ich beim Testen das Log mit tail betrachte, geschieht das immer mit Zeitverzögerungen. Ich wollte irgendwann mal einen Patch dafür schreiben, aber irgendwie bin ich nicht zu gekommen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

WeePee
Beiträge: 25
Registriert: So 8. Dez 2013, 13:46

Re: Verlaufsprotokoll eines Programmes

Beitrag von WeePee »

Ich hatte die Wahl, mich in das Eventlog einzuarbeiten oder schnell eine eigene Klasse zu schreiben.

Da ich gerne Software entwickle, ist dann der Softwareentwickler mit mir durchgegangen und ich habe Software entwickelt.

:lol:

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Verlaufsprotokoll eines Programmes

Beitrag von Christian »

@Michael lass es ins syslog schreiben, hat auch noch den charme das du mit dem syslog ja noch andere schicke sachen machen kannst wie mehrere rechner auf einen server loggen u.s.w.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Verlaufsprotokoll eines Programmes

Beitrag von m.fuchs »

Im Livebetrieb mache ich das auch häufig. Aber im Testbetrieb will ich eigentlich nur Dateien haben, die Menge der angefallen Daten ist dann zu groß. Manchmal muss ich auch aus rechtlichen Gründen Logdateien aufbewahren. Gute, das könnte man auch per Syslog realisieren, aber man muss es erst mal machen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten