Memleaks schließen

Rund um die LCL und andere Komponenten
Antworten
br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Memleaks schließen

Beitrag von br_klaus »

Hallo,
wenn ich HeapTrc verwende, dann zeigt das nach Beendigung des Programmes eine Menge Memleaks an.
Leider kann ich da oft nicht erkennen, wo genau jetzt dieser Speicherbereich belegt wurde und wo er hätte wieder freigemacht werden müssen.
Gibt es keine Möglichkeit, diese Memleaks "von Hand" zu schließen, indem man zB die Angaben von Heaptrc dazu verwendet.
Oder gibt es evtl. Freeware, die den ganzen Speicherbereich wieder bereinigt?
Herzlichen Dank!

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Memleaks schließen

Beitrag von Komoluna »

Zeigt dir denn Heaptrc die Dateien und Zeilennummern an, wo der Speicher belegt wurde?
Wenn nicht, geh mal in die Projekteinstellungen -> Compilereinstellungen -> Debuggen
Dann:
Schalte Heaptrc-Unit verwenden an
Schalte Debuggersymbole aus der ausführbaren Datei entfernen aus
Schalte Externe Datei mit Debuggersymbolen nutzen aus
(Und natürlich Debugger-Informationen für GDB erzeugen an)

Danach sollten bei jedem Memoryleak die entsprechenden codestellen angezeigt werden.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Memleaks schließen

Beitrag von br_klaus »

Komoluna hat geschrieben:Zeigt dir denn Heaptrc die Dateien und Zeilennummern an, wo der Speicher belegt wurde?
Wenn nicht, geh mal in die Projekteinstellungen -> Compilereinstellungen -> Debuggen
Dann:
Schalte Heaptrc-Unit verwenden an
Schalte Debuggersymbole aus der ausführbaren Datei entfernen aus
Schalte Externe Datei mit Debuggersymbolen nutzen aus
(Und natürlich Debugger-Informationen für GDB erzeugen an)

Danach sollten bei jedem Memoryleak die entsprechenden codestellen angezeigt werden.

MFG

Komoluna
Herzlichen Dank für die Antwort.
Aber das war eigentlich gar nicht mein Problem. Heaptrc zeigt ja die Speicherstellen an. Leider auch solche, die in einer riesigen Unit sind (KOL), die ich nicht verändern will (weil ich nicht weiß, was alles dadurch noch verändert wird).
Ich wollte fragen, ob es - sei es schon während des Programmlaufs oder erst am Ende - möglich ist, diese Speicherleaks gleich beim Entstehen auszulöschen, dh. den Heapptr richtig zu setzen, so daß das Loch erst gar nicht entsteht.
Haeptrc muss ja auch irgendwo die Informationen herbekommen. Vielleicht kann man da mit Assembler (in Windows) "dazwischenfunken", um den richtigen Sollzustand wiederherzustellen?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2905
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: Memleaks schließen

Beitrag von m.fuchs »

Kannst du den Output von Heaptrc mal zeigen? Ich vermute dass das Memoryleak nicht in der Bibliothek liegt, sondern du nur etwas daraus benutzt. Der Fehler lässt sich dann so weit zurückverfolgen.

Ein automatisches "Stopfen" der Speicherlecks gibt es nicht.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Memleaks schließen

Beitrag von br_klaus »

m.fuchs hat geschrieben:Kannst du den Output von Heaptrc mal zeigen? Ich vermute dass das Memoryleak nicht in der Bibliothek liegt, sondern du nur etwas daraus benutzt. Der Fehler lässt sich dann so weit zurückverfolgen.
Gerne. Hier als ZIP-Datei (trace.txt und dievorb.lpr = Programm)
KOL.pas gibt es im Internet: http://www.kolmck.net. Ich benutze noch eine ältere Version 3.17.
dievorb.zip
(9.95 KiB) 95-mal heruntergeladen

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2905
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: Memleaks schließen

Beitrag von m.fuchs »

br_klaus hat geschrieben:KOL.pas gibt es im Internet: http://www.kolmck.net. Ich benutze noch eine ältere Version 3.17.
Die KOL-Version müsstest du mal mitliefern. Auf Sourceforge find ich die nicht mehr.

Miit der aktuellen Version lässt es sich nicht kompilieren.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Memleaks schließen

Beitrag von br_klaus »

Hier mein KOL 3.17 und neue Version des Programms
Dateianhänge
Vorber_.zip
(2.55 MiB) 91-mal heruntergeladen

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2905
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: Memleaks schließen

Beitrag von m.fuchs »

Kompilierbar ist es damit und die übrigen Speicherlecks habe ich auch gesehen im Trace. Ich fürchte nur, beim Suchen der restlichen Lecks muss ich auch kapitulieren.
Der Quellcode ist auch nicht sehr übersichtlich, das begünstigt die Probleme sicherlich. Vielleicht hast du ja die Möglichkeiten dort einmal aufzuräumen und gewisse Teile auszulagern. Das würde die Suche sicherlich vereinfachen.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Memleaks schließen

Beitrag von br_klaus »

m.fuchs hat geschrieben:Kompilierbar ist es damit und die übrigen Speicherlecks habe ich auch gesehen im Trace. Ich fürchte nur, beim Suchen der restlichen Lecks muss ich auch kapitulieren.
Der Quellcode ist auch nicht sehr übersichtlich, das begünstigt die Probleme sicherlich. Vielleicht hast du ja die Möglichkeiten dort einmal aufzuräumen und gewisse Teile auszulagern. Das würde die Suche sicherlich vereinfachen.
Bin schon dabei.
herzlichen Dank.

Antworten