heatptrc lohnt sich

Für Fragen rund um die Ide und zum Debugger
Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

heatptrc lohnt sich

Beitrag von theo »

Wollte nur mal eben was in Erinnnerung rufen, was ich an der LazIDE wirklich ausserordentlich gut finde:
Heaptrc!!!!
Projekt -> Compilereinstellungen ->heaptrc unit verwenden. Debug Output anschauen.

Bin gerade mit Bäumen und Knoten am werkeln, und habe heaptrc eingeschaltet.
Das ist ein sehr wertvolles Werkzeug, in gewissen Bereich fast wichtiger als der Debugger.

Ich meine jetzt nicht nur am Ende des Entwicklungsprozesses mal schauen ob es Memory Leaks gibt, sondern aktiver Entwicklungs-Feedback.

z.B beim Bäume umkopieren kann es einem sehr viel Sicherheit geben, dass man auf dem richigen Weg ist und nicht irgendwo Knoten vergessen hat.
Mir hat es einen Fehler aufgezeigt, auf den ich mit "normalen Mitteln" schwer gekommen wäre.

Und wenn es dann anzeigt, nach anwendung aller Methoden...

Code: Alles auswählen

2410 memory blocks allocated : 118508/125976
2410 memory blocks freed     : 118508/125976
0 unfreed memory blocks : 0
..fühlt man sich gut. ;-) Es ist wie ein "drittes Auge" beim Entwickeln

A propos Debugging etc. :
Noch ein Tipp für GUI Anwendung:
Ich verwende unter Linux oft writeln als Kontroll-ausgabe. Dabei nervt immer das wartende Konsolen Fenster. Lösung: einfach in tools/runwait.sh diesen Teil auskommentieren # read trash crash

Noch schöner wäre, wenn sich Startprogramm und GDB implizit ausschliessen würden, die funzen nämlich sowieso nicht richtig zusammen. Ich muss immer GDB ausschalten um beim Konsolenfenster keine "Debugger im Arsch" Meldungen zu kriegen.

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:

Beitrag von Christian »

Noch ein Tipp, statt writeln debugln benutzen tut unter linux das selbe und im Windows störts nicht wenn man dann mal die debug ausgabe unter Windows braucht oder unter Linux in einer Datei haben will kann man einfach --debug-log=meinedatei.txt übergeben oder dem kunden mitteilen das er das mal tun möchte und hat seine debugausgaben wieder.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Stimmt schon. Zwei kleine Nachteile hat debugln aber:
- man muss extra die LCLProc in die uses aufnehmen
- geht unter Delphi/Kylix nicht, wenn man den Code da mal testen will.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Frage zu Heaptrc:

Für die LazInfos wollte ich es aufnehemen, mir ist es aber unter Windows nicht geglückt dieselben aussagekräftigen Zeilen im Debugfenster zu bekommen.

Liegt es an mir ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

af0815 hat geschrieben:Frage zu Heaptrc:

Für die LazInfos wollte ich es aufnehemen, mir ist es aber unter Windows nicht geglückt dieselben aussagekräftigen Zeilen im Debugfenster zu bekommen.

Liegt es an mir ?
Ich weiss ja nicht was du gemacht hast ;-)
Meinst du, dass es unter Linux klappt aber nicht unter Windows, oder hast du ein allgemeines Problem damit?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Vorgang:

1) Ein mini Testprojekt genommen
2) Heaptrc aktiviert
3) DebugOutput geöffnet
4) Projekt kompiliert und gestartet
5) Im Projekt ein wenig gearbeitet
6) DebugOutput durchgesehen
7) Programm wieder geschlossen
8) DebugOutput durchgesehen

Nichts gefunden was dem obigen entspricht !?

Log vom DebugOutput einer kompletten Session:
^done

(gdb)


^done

(gdb)


^done

(gdb)


&"No symbol \"FPC_THREADVAR_RELOCATE_PROC\" in current context.\n"

^error,msg="No symbol \"FPC_THREADVAR_RELOCATE_PROC\" in current context."

(gdb)


&"info functions FPC_CPUINIT\n"

~"All functions matching regular expression \"FPC_CPUINIT\":\n"

~"\n"

~"Non-debugging symbols:\n"

~"0x004030a0 SYSTEM_FPC_CPUINIT\n"

^done

(gdb)


^done

(gdb)


^done

(gdb)


&"info address main\n"

~"Symbol \"main\" is a function at address 0x4026d0.\n"

^done

(gdb)


^done,bkpt={number="22",type="breakpoint",disp="del",enabled="y",addr="0x004026d0",func="main",file="sqlprobe.lpr",fullname="E:\\pascal\\Projects\\schrott\\Archiv/sqlprobe.lpr",line="13",times="0"}

(gdb)


^done,bkpt={number="23",type="breakpoint",disp="keep",enabled="y",addr="0x00409b96",at="",times="0"}

(gdb)


^done,bkpt={number="24",type="breakpoint",disp="keep",enabled="y",addr="0x0040b2f0",at="",times="0"}

(gdb)


^done,bkpt={number="25",type="breakpoint",disp="keep",enabled="y",addr="0x0040b3e3",at="",times="0"}

(gdb)


&"info file\n"

~"Symbols from \"E:/pascal/Projects/schrott/Archiv/sqlprobe.exe\".\n"

~"Local exec file:\n"

~"\t`E:/pascal/Projects/schrott/Archiv/sqlprobe.exe', file type pei-i386.\n"

~"\tEntry point: 0x54ba40\n"

~"\t0x00401000 - 0x0054ba60 is .text\n"

~"\t0x0054c000 - 0x005c07f8 is .data\n"

~"\t0x005c1000 - 0x005d61c0 is .bss\n"

~"\t0x005d7000 - 0x005d9744 is .idata\n"

^done

(gdb)


^running

(gdb)

*stopped,thread-id="1",frame={addr="0x004026d0",func="main",args=[],file="sqlprobe.lpr",fullname="E:\\pascal\\Projects\\schrott\\Archiv/sqlprobe.lpr",line="13"}

(gdb)


&"info program\n"

~"\tUsing the running image of child thread 2176.0x898.\n"

~"\n"

~" Program stopped at 0x4026d0.\n"

~"It stopped at a breakpoint that has since been deleted.\n"

~"Type \"info stack\" or \"info registers\" for more information.\n"

^done

(gdb)


^running

(gdb)

*stopped,reason="exited-normally"

(gdb)


^done

(gdb)


^done

(gdb)


^done

(gdb)


^done

(gdb)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Das Debugger Zeug gehört natürlich nicht dazu.
Ausserdem siehst du die Ausgaben von heaptrc erst nach Beenden des Programms.
Am besten vor dem Schliessen der Anwendung den DebugOutput löschen (Kontextmenu). Dann müsstest du den heaptrc Ouput direkt sehen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

theo hat geschrieben:Das Debugger Zeug gehört natürlich nicht dazu.
Ausserdem siehst du die Ausgaben von heaptrc erst nach Beenden des Programms.
Am besten vor dem Schliessen der Anwendung den DebugOutput löschen (Kontextmenu). Dann müsstest du den heaptrc Ouput direkt sehen.
Das ist der GANZE Output einer Session da oben. Ich finde darinnen nichts vom heaptrace. Das mit dem löschen im Kontextmenü habe ich sowieso schon durch. Egal was ich mache, oder machen will, ich sehe es unter Windows nicht.

Laz aus dem SVN 12893, mit FPC 2.2.0.

Ist für mich nicht so wichtig, wäre aber eine schöner Artikel über heaptrace geworden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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:

Beitrag von Christian »

Unter windows wird auch nix im Debugoutput ausgegeben, dort werden bei aktiviertem heaptrc Meldungsfenster erzeugt nach Programmende die die Informationen anzeigen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Christian hat geschrieben:Unter windows wird auch nix im Debugoutput ausgegeben, dort werden bei aktiviertem heaptrc Meldungsfenster erzeugt nach Programmende die die Informationen anzeigen.
Sicher ? Oder sollten erzeugt werden ? Was kann ich da schieflaufen lassen haben.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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:

Beitrag von Christian »

Sicher, einzige Außnahme es ist Win32 GIU Applikation erzeugen nicht angehakt da könnte es sein das jemand sich gedacht hatte wenn das Programm schon auf die Console darf können wirs auch mit writeln statt über Messageboxes ausgeben und dann vieleicht vergessen hat es mit writeln zu machen ;). Hab ishc aber noch nie ausprobiert.

Jedenfalls in einem Standartprojekt geht es.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Ich habe es sowohl mit Win32GUI probiert als auch ohne. Erfolg (bezüglich heaptrc) keiner, wobei beim Beenden das Fenster sofort geschlossen wurde. Mal auf der Konsole direkt probieren.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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:

Beitrag von Christian »

Kann allerdings sein das wenn kein memleak vorliegt gar nix angezeigt wird ... das kann ich dir jetzt nicht ausm Hut sagen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

DAS könnte im Bereich des möglichen liegen, mal den Datenstöpsel ziehen. Ist einmal was ganz anderes :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:Kann allerdings sein das wenn kein memleak vorliegt gar nix angezeigt wird ... das kann ich dir jetzt nicht ausm Hut sagen.
Auf Linux stimmt das jedenfalls schon mal nicht, sonst hätte ich die Ausgabe oben (erster Beitrag) ja auch nicht gekriegt,
Dort gibt's kein Leak.

Antworten