Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   unexpected Memory leak finden (https://www.delphipraxis.net/181559-unexpected-memory-leak-finden.html)

Bjoerk 25. Aug 2014 14:23


unexpected Memory leak finden
 
Zitat:

An unexpected Memory leak has occurred.
The unexpected small black leaks are:
381-412 bytes: Unknown x 2
Wie findet man denn das?:gruebel:

Neutral General 25. Aug 2014 14:26

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.

Bjoerk 25. Aug 2014 14:48

AW: unexpected Memory leak finden
 
ich krieg die Meldung sogar so ??
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  ReportMemoryLeaksOnShutDown := true; halt;

Neutral General 25. Aug 2014 14:53

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.

Dejan Vu 25. Aug 2014 14:59

AW: unexpected Memory leak finden
 
Hat FastMM4 nicht viel detailliertere Möglichkeiten, Speicherlecks zu finden?

himitsu 25. Aug 2014 15:25

AW: unexpected Memory leak finden
 
Zitat:

Zitat von Bjoerk (Beitrag 1269796)
ich krieg die Meldung sogar so ??
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  ReportMemoryLeaksOnShutDown := true; halt;

Du schießt die Anwendung ab und wunderst dich über Speicherlecks?

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.

Bjoerk 25. Aug 2014 15:29

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

himitsu 25. Aug 2014 15:34

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.

Dejan Vu 25. Aug 2014 16:11

AW: unexpected Memory leak finden
 
Die Indy-Komponenten z.B.

Bjoerk 25. Aug 2014 16:32

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 17:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz