Memleaks schließen
-
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
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!
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
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
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.
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
Herzlichen Dank für die Antwort.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
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?
- 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
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.
Ein automatisches "Stopfen" der Speicherlecks gibt es nicht.
0118999881999119725-3
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
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
Gerne. Hier als ZIP-Datei (trace.txt und dievorb.lpr = Programm)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.
KOL.pas gibt es im Internet: http://www.kolmck.net. Ich benutze noch eine ältere Version 3.17.
- 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
Die KOL-Version müsstest du mal mitliefern. Auf Sourceforge find ich die nicht mehr.br_klaus hat geschrieben:KOL.pas gibt es im Internet: http://www.kolmck.net. Ich benutze noch eine ältere Version 3.17.
Miit der aktuellen Version lässt es sich nicht kompilieren.
0118999881999119725-3
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
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
Hier mein KOL 3.17 und neue Version des Programms
- Dateianhänge
-
Vorber_.zip- (2.55 MiB) 91-mal heruntergeladen
- 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
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.
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
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
Bin schon dabei.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.
herzlichen Dank.