AGB  ·  Datenschutz  ·  Impressum  







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

Memory Leak: Ursache finden

Ein Thema von Jazzman_Marburg · begonnen am 16. Feb 2013 · letzter Beitrag vom 1. Mär 2013
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

Memory Leak: Ursache finden

  Alt 16. Feb 2013, 13:44
Hallo.
Bei der Suche nach der Ursache für einen kleinen Memory-Leak, wäre ich sehr dankbar für jedwede Hilfe.
Nachdem ich mit "ReportMemoryLeaksOnShutDown := True;" die Nachricht (UexpectedMemoryLeak.jpg) über einen Memory-Leak erhalten habe, aber die Ursache nicht finden konnte, habe ich MadExcept mal ausprobiert.
Wie erwartet, gibt es auch einen Leak-Report (LeakReport.jpg) aus dem ich leider auch nicht schlau werde. Wenn ich in diesem Leak-Report auf die im Bild hervorgehobene Zeile im CallStack Doppelklicke, komme ich im meinem Source-Code auf diese Zeile:
  setlength( fHfgkFarbe, fAnzFarben ); Das kann aber doch nicht die Ursache für den Mem-Leak sein, oder?

Jemand eine Idee, was man man aus dem MadExcept noch weiter auslesen kann, um die Urasche für den Memory-Leak auf die Spur zu kommen?

Vielen Dank
Jazzamn
Miniaturansicht angehängter Grafiken
uexpectedmemoryleak.jpg   leakreport.jpg  
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Memory Leak: Ursache finden

  Alt 16. Feb 2013, 14:06
Kann durchaus möglich sein; zb. wenn der Speicher für den Datentyp dieses Arrays dynamisch alloziert wird (wenn es sich zb. dabei um eine Klasse handelt)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#3

AW: Memory Leak: Ursache finden

  Alt 16. Feb 2013, 14:23
Hallo.

Vielen Dank - aber das kann ich ausschließen:
Bei setlength( fHfgkFarbe, fAnzFarben ); wird die Länge eines Array of Integer mittles einfachem Integer (fAnzFarben) bestimmt.

Steht in ähnlicher Form öfters im Source -- schließe ich somit als Verdächtigen aus.

Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Memory Leak: Ursache finden

  Alt 16. Feb 2013, 14:29
Inhaltlich kann ich nicht helfen.
Evtl. könntest Du die Trial von EurekaLog versuchen.
Vielleicht hilft die ja noch genauer?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Memory Leak: Ursache finden

  Alt 16. Feb 2013, 14:55
Man kann zuerst einmal auch manuell den Code durchscannen, sofern es sich noch um kein allzu umfangreiches Projekt handelt.
Such einfach mal nach ".Create" und "GetMem"/"New" o.Ä.
Überprüfe anschließend, ob letzendlich alles allozierte auch zu 100% freigegeben wird.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Memory Leak: Ursache finden

  Alt 16. Feb 2013, 15:01
Hallo.
Steht in ähnlicher Form öfters im Source -- schließe ich somit als Verdächtigen aus.
Gruß
Jazzman
Warum? MadExcept arbeitet ja nicht nach dem Zufallsprinzip. Also mal gucken: Wie ist fHfgkFarbe definiert? Ist es eine property, eine private oder was sonst? Wird das vielleicht irgendwo vorher auf nil gesetzt?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Memory Leak: Ursache finden

  Alt 16. Feb 2013, 16:52
Ein kleiner Tipp: durchsuche den gesamten Sourcecode nach "destructor Destroy; "; wenn irgendwo der Zusatz "override; " fehlt, dann ist das ein potentielles Speicherleck.

Zusätzlich kann man noch nach "destructor T" suchen und prüfen ob in jedem Destruktor auch das inherrited aufgerufen wurde.

Geändert von sx2008 (16. Feb 2013 um 16:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#8

AW: Memory Leak: Ursache finden

  Alt 16. Feb 2013, 17:12
Ein kleiner Tipp: durchsuche den gesamten Sourcecode nach "destructor Destroy; "; wenn irgendwo der Zusatz "override; " fehlt, dann ist das ein potentielles Speicherleck.

Zusätzlich kann man noch nach "destructor T" suchen und prüfen ob in jedem Destruktor auch das inherrited aufgerufen wurde.
Ein sehr guter Tipp -- leider kein Destructor ohne override, und in jedem Destructor ist stets ein "inherited Destroy;"
Ich dachte schon, dass muß es sein... Dennoch ein guter Tipp!

[...] Warum? MadExcept arbeitet ja nicht nach dem Zufallsprinzip. Also mal gucken: Wie ist fHfgkFarbe definiert? Ist es eine property, eine private oder was sonst? Wird das vielleicht irgendwo vorher auf nil gesetzt?
Diesen Hinweis verstehe ich nicht, ich sagte ja, bei fHfgkFarbe handelt es sich um ein Array of Integer -- und ja, es ist ein private Klassenvariable. Ein Nil ist nirgends zu finden.

Man kann zuerst einmal auch manuell den Code durchscannen, sofern es sich noch um kein allzu umfangreiches Projekt handelt.
Such einfach mal nach ".Create" und "GetMem"/"New" o.Ä.
Überprüfe anschließend, ob letzendlich alles allozierte auch zu 100% freigegeben wird.
Jou -- das war mein Vorgehen, bevor ich das hier postete.

Es sind nicht allzu viele Klassen und Units -- vielleicht mal eine kleine Pause -- und dann mit Kaffee...

Vielen Dank euch allen!

Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Memory Leak: Ursache finden

  Alt 16. Feb 2013, 17:25
Versuch mal im destructor der Klasse ein SetLength(fHfgkFarbe, 0)
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#10

AW: Memory Leak: Ursache finden

  Alt 16. Feb 2013, 18:32
Versuch mal im destructor der Klasse ein SetLength(fHfgkFarbe, 0)
Keinerlei Wirkung -- ReportMemoryLeak ("37-44 Bytes: Unknown x 1") unverändert.
Delphi-Quellcode:
destructor TPaletto.Destroy;
begin

  inherited Destroy;
  SetLength(fHfgkFarbe, 0);

end;
Danke!
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:32 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