Speicher Lecks aufspüren: Zeit angabe ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
pluto
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 ?

Beitrag von pluto »

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.
MFG
Michael Springwald

monta
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:

Beitrag von monta »

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.

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

Beitrag von theo »

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. ;-)

pluto
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)

Beitrag von pluto »

habe ich mir schon gedacht.
ich hatte geoft: wenn ich weiß wie lange eine Funktion braucht um sich auszuführen, das ich dann genau weiß wo die ursache liegt.

Danke für den tipp in der Einstellung. Das werde ich mal versuch.
MFG
Michael Springwald

pluto
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)

Beitrag von pluto »

Fehler gefunden: ich hatte in einer Procedure den Flaschen Array auf 0 gesetzt. Jetzt geht es wunderbar. Aber bis jetzt gibt es noch keine tools unter Linux bzw für Lazarus die speicher leckt aufspüren können bzw. vereinfachen ?

Nur für Delphi und unter Windows.
MFG
Michael Springwald

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 »

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
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)

Beitrag von pluto »

Danke. Das hatte ich fast vergessen.....

lustig: währe mir jetzt noch erklären kann was die ausgaben bedeuten und wie ich sie verstehen muss, dann währe mir sehr geholfen.....
:twisted:

edit:
mal im ernst: versteht das einer von euch ?
MFG
Michael Springwald

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 »

mal im ernst: versteht das einer von euch ?
was verstehst daran denn nicht ? mach ma n screenshot
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

gerne. Die Ausgaben ergeben für mich einfach keinen sinn.
Das beenden dauert jetzt ewig und 5 tage.

edit:
für mich sind das nur lauter aufrufe mehr nicht. Dort steht eine liste mit Proceduren und Funktionen die ich nutzte....
Dateianhänge
Bildschirmfoto-Lazarus Run Output.png
MFG
Michael Springwald

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 »

Und in jeder dieser Funktionen erzeugst du irgend ein Objekt was nicht freigegeben wird, was hast du denn erwartet ?
Manchmal kann er auch zurückverfolgen welches Objekt scheint hier aber nicht der Fall zu sein.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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 »

@Theo du solltest dir opBitmap auch dringend mal mit angeschaltener heaptrc unit anschauen ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von theo »

Christian hat geschrieben:@Theo du solltest dir opBitmap auch dringend mal mit angeschaltener heaptrc unit anschauen ...
Yup, meinst du die Meldungen bezüglich XPMime? Oder hast du andere?

pluto
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)

Beitrag von pluto »

@Christian
du meinst also in jeder Funktion dir dort in der Liste auf geführt wird, gebe ich ein oder mehre Objekte nicht mehr frei.... da muss ich mal schauen.

Heißt das denn auch das ich sehr, sehr viele Speicher Lecks haben ?
MFG
Michael Springwald

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

Beitrag von theo »

@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.

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 »

@theo nö, bei mir wars programm noch nichma gestartet wo er schon rumgemeckert hat und gleich wieder geschlossen. die opbitmap ausm vt villeicht ist auch noch ein vt speicherleak dabei.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten