![]() |
unexpected Memory leak finden
Zitat:
|
AW: unexpected Memory leak finden
Gute Frage. Bisher war meine Taktik: "Durch Glück oder gar nicht".
Ich schaue halt mal mögliche Stellen durch die mir in den Kopf kommen und kommentiere ggf. mal ein paar Stellen aus und damit kann man die Quelle mit etwas Arbeit schon ein bisschen einschränken. Wenn man dann an der Stelle ist sieht man dann oft/manchmal woran es wahrscheinlich liegt. Wenn du ReportMemoryLeaks während der Entwicklung immer/oft an hast weißt du ja schon seit wann das Problem auftaucht und welche Stellen sich seitdem eigentlich nur geändert haben. Vllt. auch mal überlegen ob und ggf. wo du manuell Speicherplatz reservierst mit GetMem z.B. Ich hatte diese Memoryleaks z.B. schonmal bei GetPropList der RTTI. da bekommt man einen Pointer auf eine Property-Liste zurück den man (wie ich dann rausgefunden habe) später auch wieder freigeben muss mit Dispose/FreeMem. |
AW: unexpected Memory leak finden
ich krieg die Meldung sogar so ??
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin ReportMemoryLeaksOnShutDown := true; halt; |
AW: unexpected Memory leak finden
Ich würde das ReportMemoryLeaksOnShutDown := true in die DPR reinschreiben.
Dann öffne das Hauptformular und schließ es direkt wieder. Wenn der Fehler kommt dann kommentier mal solange Sachen aus dem constructor/FormCreate/FormShow/... aus bis das MemoryLeak weg ist. Ggf mal ein Testprojekt machen falls du Fremdkomponenten benutzt und dort die Komponenten nacheinander durchprobieren. Vllt. liegt es ja gar nicht an deinem Code. |
AW: unexpected Memory leak finden
Hat FastMM4 nicht viel detailliertere Möglichkeiten, Speicherlecks zu finden?
|
AW: unexpected Memory leak finden
Zitat:
Man kann sich vom FastMM den Inhalt der Speicherblöcke (zumindestens den Anfang) ausgeben lassen. Eventuell erkennt man da etwas Und man kann sich vom FastMM auch ein detailiertes Log erstellen lassen (vorallem mit dem Richtigen und nicht der abgespeckten Variante im Delphi), wo dann auch ein Stacktrace drin ist, von dem, welcher den Block beantrag hatte. |
AW: unexpected Memory leak finden
Hab ich gemacht. Same. Ich geh jetzt mal alle initialization finalization durch. Könnte aber auch sein daß zwei inherited Destroy irgendwo fehlen? Ich nehm jetzt erst mal die Fremdkomponenten raus. Oh mann ..
|
AW: unexpected Memory leak finden
Es gibt auch Komponenten, welche "absichtlich" Speicherlecks zurücklassen. :stupid:
Drum gibt es auch die RegisterMemoryLeak-Funktionen, um bekannte "Speicherlecks" von der Prüfung auszuschließen. |
AW: unexpected Memory leak finden
Die Indy-Komponenten z.B.
|
AW: unexpected Memory leak finden
Zwei Produktlisten die wie vermutet in initialization / finalization erzeugt / freigeben werden. Von TList abgeleitet, Clear überschrieben und inherited Clear vergessen. Meine Recordlisten bringen mich noch um den Verstand. Manchmal macht‘s echt keinen Spaß mehr..:wall:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz