Speicher Lecks aufspüren: Zeit angabe ?
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Speicher Lecks aufspüren: Zeit angabe ?
Hallo,
ich habe ein vermutlich in einem Programm ein Speicher Leck, aber ich weiß nicht genau wie ich das auf spüren kann:
wenn ich mehr mal die gleiche Aktion mache wird es nach einiger Zeit deutlich langsamer.
Ich dachte ich messe irgendwie die Zeit. Also ich merke mir bei jeder Zeile die aktuelle zeit und lasse sie mir gleichzeitig ausgeben. Wenn ich Writeln(Time) mache bekomme ich -1.
gibt es da was ?
ich habe es mit Writeln versucht aber ohne erfolgt.
ich habe ein vermutlich in einem Programm ein Speicher Leck, aber ich weiß nicht genau wie ich das auf spüren kann:
wenn ich mehr mal die gleiche Aktion mache wird es nach einiger Zeit deutlich langsamer.
Ich dachte ich messe irgendwie die Zeit. Also ich merke mir bei jeder Zeile die aktuelle zeit und lasse sie mir gleichzeitig ausgeben. Wenn ich Writeln(Time) mache bekomme ich -1.
gibt es da was ?
ich habe es mit Writeln versucht aber ohne erfolgt.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Also theoretisch kannst du aber nicht anhand von Laufzeiten auf Speicherlecks schließen, da die Laufzeit von zu vielen Faktoren abhängt, wie Plattenzugriff beispielsweise, wenn du gerade wo anders was kopierst, Zeitscheiben, Threadprioritäten und und und...
Praktisch gibt es vielleicht einen Hinweis, das was nicht ganz stimmt, aber direkt auf eine Ursache dürfte man so auch nicht schließen können.
Ich weiß nur, das es unter Delpi doch mal irgendwas gab, was man eingebunden hat und anschlieend wurden Speicherlecks gemeldet, mir fällt aber der name nicht ein, abgesehen davon wirds nicht in Lazarus funktionieren vermute ich mal.
Praktisch gibt es vielleicht einen Hinweis, das was nicht ganz stimmt, aber direkt auf eine Ursache dürfte man so auch nicht schließen können.
Ich weiß nur, das es unter Delpi doch mal irgendwas gab, was man eingebunden hat und anschlieend wurden Speicherlecks gemeldet, mir fällt aber der name nicht ein, abgesehen davon wirds nicht in Lazarus funktionieren vermute ich mal.
Zeit messen kann man mit der Differenz zweier Abfragen von GetTickCount (unit LCLIntf).
Damit wirst du aber kaum dein Speicherleck finden.
Ob du eins hast, kannst du feststellen, wenn du in Compiler-Optionen -> Linken "heaptrc-Unit verwenden" anklickst.
Debugger Ausgaben beachten, beim Beenden des Programms.
Am besten ist's aber immer noch, wenn man den Code sorgfältig nach Bugs durchforstet.
Damit wirst du aber kaum dein Speicherleck finden.
Ob du eins hast, kannst du feststellen, wenn du in Compiler-Optionen -> Linken "heaptrc-Unit verwenden" anklickst.
Debugger Ausgaben beachten, beim Beenden des Programms.
Am besten ist's aber immer noch, wenn man den Code sorgfältig nach Bugs durchforstet.

-
- 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:
theo hat dir das doch schon beantwortet. In den Linker Optionen die heaptrc unit einschalten dann wird die mit eingelinkt und erzählt dir bei Programmende schön detailiert wo und in welcher funktion du deinen Speicher nicht freigegeben hast was gibts daran denn schon wieder nicht zu verstehen ? Das funktioniert auf allen Systemen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
@Pluto: Nicht unbedingt. Das kann auch sein, wenn du in einem Loop mehrere Objekte kreierst die du dann nicht freigibst. Also du kriegst eine riesen Liste von Heaptrc, obwohl es eventuell nur eine Ursache hat.
Habe soeben, das XPMime Leck beseitigt. Das sah bei Heaptrc auch wie Weltuntergang aus, hat aber während des Programmlaufs keinen Speicher gefressen. Es hat nur in finalization nicht richtig freigegeben.
Habe soeben, das XPMime Leck beseitigt. Das sah bei Heaptrc auch wie Weltuntergang aus, hat aber während des Programmlaufs keinen Speicher gefressen. Es hat nur in finalization nicht richtig freigegeben.