AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FastMM Debuglog -> wo anfangen?

Ein Thema von hitzi · begonnen am 15. Okt 2008 · letzter Beitrag vom 15. Okt 2008
Antwort Antwort
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#1

FastMM Debuglog -> wo anfangen?

  Alt 15. Okt 2008, 14:17
Hallo,

ich benutze gerade das erste Mal FastMM um Memoryleaks zu finden. Ein paar sind tatsächlich 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 aufgeführten Funktionen ist das Memoryleak zu finden? Was kann mir dieser Logeintrag noch alles sagen?

Und was mache ich mit solchen Einträgen, 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 für eure Hilfe.

Viele Grüße
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: FastMM Debuglog -> wo anfangen?

  Alt 15. Okt 2008, 18:36
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 Stück für Stück, wenn du aus der Logbeschreibung von FastMM nicht schlau wirst.
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#3

Re: FastMM Debuglog -> wo anfangen?

  Alt 15. Okt 2008, 18:56
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 überprüfen lassen?
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00: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