AGB  ·  Datenschutz  ·  Impressum  







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

Memory Leaks werden nicht gemeldet

Ein Thema von Y.Elm · begonnen am 9. Feb 2012 · letzter Beitrag vom 27. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
Y.Elm

Registriert seit: 19. Sep 2011
Ort: Berlin
21 Beiträge
 
Delphi 2010 Professional
 
#1

Memory Leaks werden nicht gemeldet

  Alt 9. Feb 2012, 15:24
Delphi-Version: 2010
Hallo allerseits,
ich arbeite seit einiger Zeit an der Weiterentwicklung eines Software-Projektes, das von Delphi 7 auf Delphi 2010 umgestellt wurde.
Aus Langzeittests ist auch bekannt, dass mindestens ein Memory Leak im Code steckt (vermutlich sind es mehr als nur einer ).
Durch System.ReportMemoryLeaksOnShutdown := TRUE; habe ich die Warnmeldung über Memory Leaks aktiviert. Allerdings wird mir keine Meldung angezeigt.
Ich habe testweise absichtlich einen Memory Leak in meinen Programmcode eingebaut, bekomme aber immernoch keine Meldung.
Es werden zwar einige DLLs verwendet, aber nirgendwo ein SimpleShareMem eingebunden oder ein anderer MemoryManager verwendet.

In einem kleinen Testprojekt wird die Meldung problemlos angezeigt, nur in meinem großen Projekt nicht.
Woran könnte das liegen? Müssen bestimmte Compiler-Optionen aktiviert sein?

Danke schonmal für eure Hilfe
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Memory Leaks werden nicht gemeldet

  Alt 9. Feb 2012, 15:42
Ich würde versuchen die Ursache über "Binäres Umzingeln" einzukreisen:

* ein Memory Leak einbauen und den Programmstartupcode so anpassen, dass nach das Programm nach der Initalisierung sofort beendet wird (also zum Beispiel nach allen Formularerzeugungen, vor dem Application.Run)
* wenn dann das Leak angezeigt wird: den deaktivierten Code nach und nach wieder aktivieren und Test wiederholen bis das Phänomen auftritt => dann muss es im zusätzlich aktivierten Code liegen
* wenn das Leak nicht abgezeigt wird, weiteren Code stilllegen und Test wiederholen
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Memory Leaks werden nicht gemeldet

  Alt 9. Feb 2012, 15:45
ReportMemoryLeaksOnShutdown kann nur Speicherlecks finden, welche im Delphi-Speichermanager (FastMM) liegen.
File-/GDI-Handles und direkte Speicheranfragen an Windows sind dort nicht enthalten.

Auch werden nur Speicherlecks gefunden, welche zum Programmende (noch) existieren.
Einfach nur ein TEdit.Create(Self); in einem Timer wird nicht gefunden, auch wenn wärend der Laufzeit dort "Speicherlecks" entstehen,
so werden diese zum Programmende vom Self (der Form) aufgeräumt und schwupps, wird nichts davon mehr gefunden.
$2B or not $2B
  Mit Zitat antworten Zitat
Y.Elm

Registriert seit: 19. Sep 2011
Ort: Berlin
21 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Memory Leaks werden nicht gemeldet

  Alt 9. Feb 2012, 16:11
Danke für eure schnellen Antworten.
Leider bekomme ich immernoch keine MemLeak-Meldung ...
Ich habe meinen gesamten Code jetzt folgendermaßen zusammengestaucht:

Delphi-Quellcode:
// Projektdatei
uses
  windows,
  Forms,
  mwsmain in 'source\mwsmain.pas{MWSForm};

var pp: Pointer;
begin
  ReportMemoryLeaksOnShutdown := TRUE;
  GetMem(pp, 100); // absichtlicher Memory Leak zum Test

  Application.Initialize();
  Application.CreateForm(TMWSForm, MWSForm); // in MWSForm.Create() wird ausschließlich inherited Create(Application); ausgeführt
  try
    Application.Run();
  finally
    Application.Terminate();
  end;

end.
Es werden keine Ressourcen eingebunden, es werden keine DLLs eingebunden, es passiert eigentlich gar nichts, außer, dass ich einen Memory Leak erzeuge ... aber genau der wird nicht gemeldet.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Memory Leaks werden nicht gemeldet

  Alt 9. Feb 2012, 16:39
ReportMemoryLeaksOnShutdown kann nur Speicherlecks finden, welche im Delphi-Speichermanager (FastMM) liegen.
File-/GDI-Handles und direkte Speicheranfragen an Windows sind dort nicht enthalten.
Das dürfte für Dich wichtig sein. GetMem ist genau eine solche direkte Speicheranfrage.

Ersetze mal die Zeile durch aMemoryleak := TForm.Create(nil); Das dürftest du dann sehen.

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Y.Elm

Registriert seit: 19. Sep 2011
Ort: Berlin
21 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Memory Leaks werden nicht gemeldet

  Alt 13. Feb 2012, 11:56
OK, jetzt bin ich wirklich verwirrt.
Ich kompiliere mein Projekt auf meinem Entwicklungsrechner, starte die Exe aus der IDE, beende das Programm -> Ergebnis: keine MemLeak-Meldung.
Ich kopiere die eben erstellte Exe auf einen Techtrechner, starte die Exe, beende das Programm -> Ergebnis: die Meldung über MemLeaks wird angezeigt.
Ich schließe Delphi auf meinem Entwicklungsrechner und starte auch dort die Exe ohne IDE -> Ergebnis: trotzdem keine MemLeak-Meldung.


Kann denn das System, auf dem eine Exe ausgeführt wird, so einen Einfluss auf den Memory Manager haben, dass er MemLeaks nicht erkennt bzw. die Meldung nicht anzeigen kann / darf?

Anmerkung: Mein Entwicklungsrechner = Win 7, 64 Bit
Testrechner = Win 8 Developer Preview, 32 Bit
Auf beiden Rechnern wird das Programm mit Standard-Benutzerrechten ausgeführt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Memory Leaks werden nicht gemeldet

  Alt 13. Feb 2012, 12:13
Vielleicht wurde auf dem Rechner der Code gar nicht ausgeführt, der das Speicherleck verursacht, so dass kein Speicherleck aufgetreten ist.

Wie wäre es denn mit FastMM4 direkt? Vielleicht findet das ja was.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Memory Leaks werden nicht gemeldet

  Alt 13. Feb 2012, 12:18
Es könnten auch Handels von Windows sein, welche nicht mehr freigegeben werden.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Y.Elm

Registriert seit: 19. Sep 2011
Ort: Berlin
21 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Memory Leaks werden nicht gemeldet

  Alt 27. Feb 2012, 11:46
Hier ein kleines Update zum Problem:
Ich habe mir die FullDebug-Version des FastMM besorgt und diese dann im FullDebugMode laufen lassen, mit den Optionen: Prüfung auf Zugriff auf freigegebenen Speicher, detailliertem Aufrufstack und Erzeugen eines Textlogs.

Und siehe da: die Suche nach Memory Leaks wird mit minimalem Aufwand um ein Vielfaches einfacher .
Und es wurde sogar ein Zugriff auf bereits freigegeben Speicher gemeldet. Nach dem Beseitigen dieses Problems hab ich sogar auch wieder die Message beim Beenden der Applikation bekommen ... nur dass ich sie da nicht mehr brauche, weil das Textlog viel bequemer und aufschlussreicher ist ...
Da der Zugriff-auf-freigegebenen-Speicher-Bug in einer komplizierten Funktion beim Beenden der Applikation steckte, vermute ich, dass da irgendwas durcheinander gekommen ist, was dazu führte, dass die MessageBox nicht von FastMM angezeigt wurde.

Also ich kann nur Jedem empfehlen, sofort die FullDebug-Version des FastMM zu benutzen, sobald man auf MemLeak-Jagt geht.
  Mit Zitat antworten Zitat
hoika

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

AW: Memory Leaks werden nicht gemeldet

  Alt 27. Feb 2012, 13:13
Hallo,

und ich kann nur empfehlen, nutzt Unit-Tests.
Ich habe hier eine App, die braucht 5 Minutem zum Starten im FullDebug-Mode
(viel XML-Kram).


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:55 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