Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unexpected Memory Leak (https://www.delphipraxis.net/95634-unexpected-memory-leak.html)

dominikkv 10. Jul 2007 19:36


Unexpected Memory Leak
 
Hi

bin nun seit einiger Zeit an einem Projekt.
Heute hab ich gesehen das man mit
Delphi-Quellcode:
ReportMemoryLeaksOnShutdown := True;
bei Programmende seine Leaks angezeigt bekommt.
Naja...hier mal meine kleine Liste^^
Zitat:

---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:



1 - 12 bytes: TIdThreadSafeInteger x 1, String x 50

13 - 20 bytes: TList x 5, TIdHTTPProtocol x 1, TIdStackWindows x 1, String x 28, Unknown x 6

21 - 28 bytes: TCriticalSection x 1, TIdProxyConnectionInfo x 1, TIdReplyRFC x 2, TIdCriticalSection x 3, TBrush x 1, TPen x 1, String x 19

29 - 36 bytes: TFont x 1, TIdCookies x 1, TIdBuffer x 2, TOcilloScope x 1, String x 48, Unknown x 5

37 - 44 bytes: String x 7

45 - 52 bytes: TMultiReadExclusiveWriteSynchronizer x 1, TIdURI x 1, String x 7

53 - 60 bytes: TIdCookieList x 2, TIdSocketHandle x 1, TStringList x 4, TBitmap x 5, String x 6

61 - 68 bytes: TIdCookieRFC2109 x 2, TThreadLocalCounter x 1, TIdHeaderList x 6, String x 24, Unknown x 1

69 - 76 bytes: TIdCookieManager x 1, String x 2

77 - 84 bytes: String x 4

85 - 92 bytes: String x 3

93 - 100 bytes: TBitmapCanvas x 1, String x 2

101 - 108 bytes: String x 3, Unknown x 1

109 - 116 bytes: TBitmapImage x 5, String x 3

133 - 140 bytes: TShoutcastQuery x 1

149 - 156 bytes: TIdHTTPResponse x 1

173 - 188 bytes: TIdHTTPRequest x 1

253 - 268 bytes: TIdSocketListWindows x 1, TIdIOHandlerStack x 1

317 - 348 bytes: String x 1

349 - 380 bytes: TIdHTTP x 1

381 - 412 bytes: String x 2

477 - 524 bytes: Unknown x 7

733 - 796 bytes: String x 1

1261 - 1372 bytes: Unknown x 1



The sizes of unexpected leaked medium and large blocks are: 61740


---------------------------
OK
---------------------------
So, was kann ich dagegen machen, oder wie finde ich am besten meine Leaks und wie behebe ich diese?

Bin für jeden Tipp dankbar^^

mfg.Dominik

hoika 10. Jul 2007 19:46

Re: Unexpected Memory Leak
 
Hmmmmm,

also wenn du memcheck benutzt,
zeigt dir das auch die Stellen im Quellcode an.


Heiko

Bernhard Geyer 10. Jul 2007 21:13

Re: Unexpected Memory Leak
 
Zitat:

Zitat von hoika
also wenn du memcheck benutzt,
zeigt dir das auch die Stellen im Quellcode an.

Mach FastMM/Delphi 2006/2007 auch. Beide benötigen jedoch mehr Debug-Infos in der Exe (TD32-Debug-Infos). Ohne diese haben sie keine Infos über Quellzeilen und Aufrufstack.

alzaimar 10. Jul 2007 21:53

Re: Unexpected Memory Leak
 
Fang von unten an (also im der Textdatei). Die ersten paar Leaks sind/waren (bei D6) in der VCL, aber dann fangen deine Korken an.

Mach es so:
1. Starten / Beenden. Etwaige Memoryleaks erkennen, ausmerzen
2. Starten 1.Button klicken, Beenden (Rest siehe oben)

usw. weiter durcharbeiten usw usw usw.

Dunkel 11. Jul 2007 11:46

Re: Unexpected Memory Leak
 
Die ganzen TIdxxx kommen von irgendeiner INDY-Kompo, wenn Du diese freigibst sollte die Liste schon besser aussehen.

Der_Unwissende 11. Jul 2007 12:06

Re: Unexpected Memory Leak
 
Zitat:

Zitat von Dunkel
Die ganzen TIdxxx kommen von irgendeiner INDY-Kompo, wenn Du diese freigibst sollte die Liste schon besser aussehen.

Hi, stimmt so nicht ganz, die Indy-Komponenten haben das (wohl bekannte?) Problem, dass die Units nicht sauber alles frei räumen, was alloziert wird. Der DGL-Luke hat mir mal gesagt, dass das wohl bekannt sei und die Begründung läge seitens der Indy-Entwickler darin, dass die keine gute Stelle gefunden hätten um sicher aufräumen zu können. Ein Teil der Leaks dürfte also bleiben, solange nur die Indy-Units im Programm auftauchen.

Gruß Der Unwissende

Dunkel 11. Jul 2007 12:31

Re: Unexpected Memory Leak
 
OK, da hast Du recht. TIdThradSafeInteger x1 & TIdCriticalSection x2 werden (zu mindest bei mir mit INDY 10) auch beim Freigeben der INDY-Komponente nicht freigegeben. (klick mich)

dominikkv 12. Jul 2007 13:36

Re: Unexpected Memory Leak
 
wow... danke für eure antworten :mrgreen:
ich hab jetzt mal memcheck in mein projekt eingebunden (in uses-klausel und dann MemChk; als ersten Befehl).
Außerdem hab ich mit Debug-DCUs, keine optimierung, mit Stack-Frames und mit TD32-Debug-Infos compiliert.
Nach dem Start kommt folgende Meldung:
Zitat:

---------------------------
Benachrichtigung über Debugger-Problem
---------------------------
In Projekt C:\Users\Dominik\Documents\Borland Studio-Projekte\MusikManager\SoFi\SoFi.exe trat ein Problem mit folgender Meldung auf: 'access violation at 0x7732f31a: write of address 0x00080f70'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK
---------------------------
und nach einem klick auf OK bleibt er bei dieser Zeile hängen:
Zitat:

7732F31A 53 push ebx


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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