AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Was mache ich mit der MemoryLeak Ausgabe?
Thema durchsuchen
Ansicht
Themen-Optionen

Was mache ich mit der MemoryLeak Ausgabe?

Ein Thema von Sherlock · begonnen am 11. Nov 2016 · letzter Beitrag vom 15. Nov 2016
Antwort Antwort
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.421 Beiträge
 
Delphi 12 Athens
 
#1

AW: Was mache ich mit der MemoryLeak Ausgabe?

  Alt 11. Nov 2016, 08:10
Wie bereits geschrieben wurde, suche zuerst nach den von Dir direkt genannten Elementen, welche nicht frei gegeben wurden, in diesem Fall die TDev... Objekte.

Anschließend, sollten noch Memory Leaks auftreten, schaust Du, wo die im Report genannten Klassen von Dir verwendet werden und fängst and deren Lebenszyklus zu überprüfen.

Ein normales Delphi-Programm hat erst einmal keine Speicherlöcher.

Achtung: wenn Du viel mit Interfaces arbeitest und durch den Debugger gehst, gibt es eigentlich immer Speicherlöcher, welche durch den Debugger (Watches, etc.) entstehen. Dieser Bericht ist ohne Eingreifen (Anhalten) durch den Debugger eigentlich immer korrekt, aber wenn Du das Programm im Debugger angehalten hast, ignoriere den lieber, bevor Du Geister jagst.

......
Lizbeth W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.460 Beiträge
 
Delphi 12 Athens
 
#2

AW: Was mache ich mit der MemoryLeak Ausgabe?

  Alt 11. Nov 2016, 08:21
Moin...
Zitat:
ich habe mal zum Spaß und aus Neugier System.ReportMemoryLeaksOnShutdown := True; gesetzt.
...das ist schon der erste Fehler. Im Nachhinein ist das schlecht herauszufinden. Wenn du es immer anhast, dann wirst du immer "gewarnt" wenn du etwas vergessen hast. Dann ist der Bereich wo du schauen mußt übersichtlicher...

Ansonsten gelten die Tipps meiner Vorgänger.

Geändert von haentschman (11. Nov 2016 um 09:45 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Was mache ich mit der MemoryLeak Ausgabe?

  Alt 11. Nov 2016, 08:32
Hallo,
setze bei den Link-Optionen auch TD32 und ext. Debug-Symbole.
Dann zeigt er Dir die Unit und die Zeile der Erzeugung des Leaks.

In Dienme Fall erzeugst du wohl ein dynamisch ein Grid (TDevGrid) und gibst es nicht mehr frei.
Das reißt dann die anderen Leaks auf.
Heiko

Geändert von hoika (11. Nov 2016 um 08:43 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.216 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Was mache ich mit der MemoryLeak Ausgabe?

  Alt 11. Nov 2016, 09:44
Der von Embarcadero mitgelieferte FastMM4 kann das doch gar nicht, oder? Wenn du den "richtigen" von https://github.com/pleriche/FastMM4 nimmst kannst du dir in ebendiesem Logfile genau anzeigen lassen:

"He, da wurde ein Objekt vom Typ TStringList nicht freigegeben. Als es erstellt wurde war der Callstack:
TForm1.erstelleKram(..) - Zeiel 5
TForm1.Button1Click(..) - Zeile 3
[...]
Application.Run()"
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.421 Beiträge
 
Delphi 12 Athens
 
#5

AW: Was mache ich mit der MemoryLeak Ausgabe?

  Alt 11. Nov 2016, 11:27
setze bei den Link-Optionen auch TD32 und ext. Debug-Symbole.
Dann zeigt er Dir die Unit und die Zeile der Erzeugung des Leaks.
Zumindest im Standard-Memorymanager von Delphi gibt das keine weiteren Informationen.

@Sherlock:
Hier mal ein Beispiel für lediglich ein Objekt, welches nicht freigegeben wurde und die dadurch entstandenen Speicherlöcher. Manchmal kann ganz wenig zu sehr viel führen.

Code:
An unexpected memory leak has occurred. The unexpected small block leaks are:

1 - 12 bytes: TMoveArrayManager<OCTAX.Biometrics.IOctaxBiometricsRegisteredUser> x 1, TMoveArrayManager<OCTAX.Biometrics.IOctaxBiometricsDevice> x 1, TMoveArrayManager<System.NativeUInt> x 2, TMoveArrayManager<OCTAX.Common.Hardware.IOctaxHardware> x 1, Unknown x 5
21 - 28 bytes: TOctaxBiometricsDatastoreMemory x 1, TOctaxBiometricsAnalyzer x 6, TOctaxProvider x 8
29 - 36 bytes: TCriticalSection x 5, TDigitalPersonaQuality x 1
37 - 44 bytes: TDigitalPersonaFingerJetAnalyzer x 1
45 - 52 bytes: TList<System.TMethod> x 5
53 - 60 bytes: TCollectionChangedEventImpl<OCTAX.Biometrics.IOctaxBiometricsDevice> x 1, TCollectionChangedEventImpl<OCTAX.Biometrics.IOctaxBiometricsRegisteredUser> x 1, TCollectionChangedEventImpl<System.NativeUInt> x 2, TCollectionChangedEventImpl<OCTAX.Common.Hardware.IOctaxHardware> x 1
61 - 68 bytes: TOctaxBiometricsManager x 1, UnicodeString x 6
69 - 76 bytes: TList<OCTAX.Biometrics.IOctaxBiometricsRegisteredUser> x 1, TList<OCTAX.Biometrics.IOctaxBiometricsDevice> x 1, TList<System.NativeUInt> x 2, UnicodeString x 1
77 - 84 bytes: TOctaxHardwareManager x 1, UnicodeString x 1
117 - 124 bytes: TDigitalPersonaFingerJet x 1
189 - 204 bytes: UnicodeString x 8
......

P.S.: Ich hatte zur Demonstration des Ergebnisses einfach mal sichergestellt, dass EIN Objekt nicht freigegeben wurde.
Lizbeth W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.825 Beiträge
 
Delphi 12 Athens
 
#6

AW: Was mache ich mit der MemoryLeak Ausgabe?

  Alt 11. Nov 2016, 12:24
Ahaaa, Vielen Dank für die Hinweise! Ich hatte zwei Threads die nicht immer sauber beendet wurden. Das habe ich immerhin schon eliminieren können. Jetzt muss ich mir mal das volle FastMM installieren. In dem Zusammenmhang: Wo stelle ich das mit dem TD32 ein? Externe Symbole habe ich gefunden, aber TD32... seh ich nicht. Berlin.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.052 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Was mache ich mit der MemoryLeak Ausgabe?

  Alt 11. Nov 2016, 12:49
Zur genaueren Analyse von Memoryleaks empfehle ich LeakCheck. Mit dem usage Graph kann man dann bei einem umfangreicheren Leak leichter das Rootobjekt identifizieren.

Wo stelle ich das mit dem TD32 ein? Externe Symbole habe ich gefunden, aber TD32... seh ich nicht. Berlin
Linking->Debug information auf True setzen
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.825 Beiträge
 
Delphi 12 Athens
 
#8

AW: Was mache ich mit der MemoryLeak Ausgabe?

  Alt 11. Nov 2016, 13:18
Danke für den Tipp. Ich werde dann mal auch das Delphi-LeakCheck testen. Wie war die Kirmes?

Erster Abtörner...genau wie beim FastMM4 steht nicht, was man in die Bibliothekspfade oder Suchpfade eintragen soll. Das ist...so was von Grundlage, ohne läuft gar nichts. Schade eigentlich, denn ansonsten sieht das schon viel professioneller und aufgeräumter als FastMM4 aus.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.690 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Was mache ich mit der MemoryLeak Ausgabe?

  Alt 11. Nov 2016, 13:18
Zur genaueren Analyse von Memoryleaks empfehle ich LeakCheck. Mit dem usage Graph kann man dann bei einem umfangreicheren Leak leichter das Rootobjekt identifizieren.
Ist das als Ersatz für FastMM ?
Sven Harazim
--
  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 23:17 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