Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FastMM Debuglog -> wo anfangen? (https://www.delphipraxis.net/122399-fastmm-debuglog-wo-anfangen.html)

hitzi 15. Okt 2008 14:17


FastMM Debuglog -> wo anfangen?
 
Hallo,

ich benutze gerade das erste Mal FastMM um Memoryleaks zu finden. Ein paar sind tatschlich vorhanden. Jetzt bin ich aber an einem Punkt, wo ich nicht wei, wie ich das Problem beheben soll.

Beispiel aus der Logdatei:
Zitat:

--------------------------------2008/10/15 15:07:37--------------------------------
A memory block has been leaked. The size is: 36

This block was allocated by thread 0x10E4, and the stack trace (return addresses) at the time was:
4032E2 [System.pas][System][@GetMem][3412]
407343 [System.pas][System][@NewUnicodeString][18113]
406A9C [System.pas][System][@UStrFromPWCharLen][17062]
42B077 [Classes.pas][Classes][TStrings.SetDelimitedText][5241]
513AA0 [Functions\uSchedUtils.pas][uSchedUtils][TSchedItem.WriteDelimitedText][915]
51531D [Functions\uSchedUtils.pas][uSchedUtils][TScheduler.WriteDelimitedText][1458]
5154F2 [Functions\uSchedUtils.pas][uSchedUtils][TScheduler.LoadFromFile][1490]
605A6B [Forms\uMain.pas][uMain][TfrmMain.FormCreate][1083]
4B9B7B [Forms.pas][Forms][TCustomForm.DoCreate][3260]
4B97C3 [Forms.pas][Forms][TCustomForm.AfterConstruction][3143]
404DB8 [System.pas][System][@AfterConstruction][10616]

The block is currently used for an object of class: Unknown

The allocation number is: 79030

Current memory dump of 256 bytes starting at pointer address 7FD1D550:
B0 04 02 00 01 00 00 00 08 00 00 00 53 00 65 00 72 00 76 00 65 00 72 00 2D 00 33 00 00 00 13 A7
97 79 80 80 80 80 80 80 00 00 00 00 11 DD D1 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
B7 09 01 00 E2 32 40 00 03 48 40 00 4A 4D 40 00 9B F2 4A 00 23 F9 49 00 55 3B 4A 00 97 6E 45 00
18 7F 45 00 E4 DA 42 00 15 DD 42 00 47 E7 42 00 E4 10 00 00 21 48 40 00 95 4D 40 00 51 8F 42 00
67 48 40 00 5C FA 49 00 21 48 40 00 95 4D 40 00 51 8F 42 00 4A 3D 4A 00 AA 7F 45 00 0C 3D 4A 00
E4 10 00 00 24 00 00 00 F4 A8 49 00 19 AD FA 85 48 31 62 00 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 E6 52 05 7A 00 00 00 00 F1 D8 D1 7F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 09 01 00 E2 32 40 00 03 48 40 00 4A 4D 40 00
. . . . . . . . . . . S . e . r . v . e . r . - . 3 . . . .
y . . . . .  . . . . . . . . . . . . . . . .
. . . 2 @ . . H @ . J M @ . J . # I . U ; J . n E .
.  E . B . . B . G B . . . . ! H @ . M @ . Q B .
g H @ . \ I . ! H @ . M @ . Q B . J = J .  E . . = J .
. . . $ . . . I . . * H 1 b .
R . z . . . . 
. . . . . . . . . . . . . . . . @ . . . 2 @ . . H @ . J M @ .
Bei welcher der oben aufgefhrten Funktionen ist das Memoryleak zu finden? Was kann mir dieser Logeintrag noch alles sagen?

Und was mache ich mit solchen Eintrgen, die noch nicht mal eine meiner Funktionen beinhaltet? Kann man daran berhaupt was ndern?
Zitat:

--------------------------------2008/10/15 15:07:37--------------------------------
A memory block has been leaked. The size is: 36

This block was allocated by thread 0x10E4, and the stack trace (return addresses) at the time was:
4032E2 [System.pas][System][@GetMem][3412]
404803 [System.pas][System][TObject.NewInstance][9781]
404D4A [System.pas][System][@ClassCreate][10568]
443626 [SyncObjs.pas][SyncObjs][TCriticalSection.Create][521]
60F9BB
40561B [System.pas][System][InitUnits][12984]
405683 [System.pas][System][@StartExe][13049]
4090FB [SysInit.pas][SysInit][@InitExe][693]
6107F5
76E24911 [BaseThreadInitThunk]
7721E4B6 [Unknown function at RtlInitializeExceptionChain]

The block is currently used for an object of class: TIdCriticalSection

The allocation number is: 1214

Current memory dump of 256 bytes starting at pointer address 7FEF63F0:
B4 AD 4C 00 80 1D 19 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7D 93 18 28 80 80 80 80 00 00 00 00 51 AC EF 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
C5 04 00 00 E2 32 40 00 43 73 40 00 9C 6A 40 00 21 8F 40 00 6A F3 21 77 2C E8 20 77 2C 8B 24 77
52 87 24 77 17 EF 20 77 24 1F 29 77 7D 25 29 77 E4 10 00 00 FE 32 40 00 26 5B 40 00 82 75 40 00
02 FE 4D 00 B3 55 40 00 68 59 40 00 4D 08 61 00 11 49 E2 76 B6 E4 21 77 89 E4 21 77 00 00 00 00
E4 10 00 00 22 00 00 00 B0 04 02 00 8D 1C 09 2A 48 31 62 00 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 72 E3 F6 D5 80 80 00 00 00 00 01 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CA 04 00 00 E2 32 40 00 43 73 40 00 8C 6C 40 00
* L . . . . . . . . . . . . . . . . . . . . . . . .
} . ( . . . . Q  . . . . . . . . . . . . . . . .
. . . 2 @ . C s @ . j @ . ! @ . j ! w , w , $ w
R $ w . w $ . ) w } % ) w . . . 2 @ . & [ @ . u @ .
. M . U @ . h Y @ . M . a . . I v ! w ! w . . . .
. . . " . . . . . . . . * H 1 b .
r . . . . . . . .
. . . . . . . . . . . . . . . . . . . 2 @ . C s @ . l @ .
Vielen Dank schon mal fr eure Hilfe.

Viele Gre

omata 15. Okt 2008 18:36

Re: FastMM Debuglog -> wo anfangen?
 
Prinzipiell ist ein Auskommentieren immer sehr hilfreich.

Die Informationen im Logfile musst du von unten nach oben lesen (pro Fehlerblock). Wenn du dort eigene Unitangaben findest, liegt dort das Problem. Bedenke aber, dass dort eben nur die Zeile der Erzeugung angezeigt wird. Die Freigabe muss dann an geeigeneter Stelle erfolgen. Deshalb ist das Auskommentieren auch ein gutes Mittel, zum schnellen finden.

Wenn es Fehler sind, die in keiner deiner Units auftreten, dann solltest du vielleicht mal ein leeres Projekt testen. Treten auch dort diese Fehler auf so sind das Fehler in der VCL oder in anderen Komponenten.
Solche Probleme habe ich z.B. bei meinem Delphi selber korrigiert.

Ich kann mich also nur wiederholen, kommentiere zentrale Elemente deines Quellcodes aus und teste Stck fr Stck, wenn du aus der Logbeschreibung von FastMM nicht schlau wirst.

hitzi 15. Okt 2008 18:56

Re: FastMM Debuglog -> wo anfangen?
 
Dank deiner Antwort hab ich das Problem in meiner Unit gefunden. Ich hatte - warum auch immer - die Destroy Funktion einer Klasse mit reintroduce deklariert. Dadurch wurde sie nicht aufgerufen und die verwendeten Objekte nicht wieder freigegeben.

Kann man noch etwas mit FastMM berprfen lassen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 Uhr.

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