AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Wie benutzt man MadExcept Memory Leak Detection?

Ein Thema von DieDolly · begonnen am 22. Feb 2021 · letzter Beitrag vom 23. Feb 2021
Antwort Antwort
Seite 1 von 2  1 2   
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#1

Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 00:28
Ich werde noch verrückt. Ich habe MadExcept installiert aber es wird mir nichts angezeigt wenn ich mein Testprogramm mit einem absichtlichem Memory Leak beende.
Ich habe in einer großen Komponente die nicht von mir ist einen Memory Leak den ich aber nicht finde. ReportMemoryLeaks möchte ich aber auch nicht abschalten, aber die Meldung nervt mich.

Wie mache ich mit madExcept ein Memory Leak ausfindig?

- ein Settings Window wie es in der Hilfe steht habe ich keins.
- ich soll "active error search" aktivieren, ohne Settings Window geht das aber nicht

Wenn ich das hier in die uses meiner dpr schreibe und dann speichere, verschwinden die Zeilen einfach wieder
Delphi-Quellcode:
madExcept,
 madLinkDisAsm,
 madListHardware,
 madListProcesses,
 madListModules,

Geändert von DieDolly (22. Feb 2021 um 00:38 Uhr)
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 00:56
Versuch mal madExcept settings unter project.
Renate
  Mit Zitat antworten Zitat
hoika

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

AW: Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 05:56
Hallo,
nimm MadExcept wieder raus und binde FastMM4 ein.
Die weitere Benutzung siehe Google oder hier die Suche.
Heiko
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 07:55
madExcept kann das schon, das setzt aber eine korrekte Installation voraus - die sich auch in die IDE integriert. Wie oben angemerkt im Menü "Projekt".
Danach hilft die Hilfe:

http://help.madshi.net/madExceptSettings1.htm
und
http://help.madshi.net/DebugMm.htm
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#5

AW: Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 11:54
Jetzt klappt es endlich! Aber ich glaube das ist zu kompliziert für mich. Ein 2x TNamespace zeigt mir die Delphi-IDE als Leak an. madExcept zeigt es hier an mit "TNamespace.Create".
Delphi-Quellcode:
constructor TNamespace.Create(PIDL: PItemIdList; AParent: TNamespace);
{ Pass the PIDL of a Namespace Object Folder to create along with its parent    }
{ to create a new TNamespace.                                                   }
begin
  inherited Create;

  FParent := AParent;
  FShellCache.Data.SmallIcon := -1;
  FShellCache.Data.SmallOpenIcon := -1;
  FShellCache.Data.OverlayIndex := -1;
  FShellCache.Data.OverlayIconIndex := -1;
  IconCache := -1;
  Include(FStates, nsShellDetailsSupported); // Be optomistic
  Include(FStates, nsShellFolder2Supported); // Be optomistic
  Include(FStates, nsShellOverlaySupported); // Be optomistic
  FreePIDLOnDestroy := True;
  FNamespaceID := SHELL_NAMESPACE_ID;
  { It is the Root Folder since it has no parent }
  if not Assigned(AParent) then
  begin
    { Either a nil for PID or if the PID is the Desktop PIDL means a full tree }
    if not Assigned(PIDL) or PIDLMgr.IsDesktopFolder(PIDL) then
    begin
      { If PID is already assigned then use it }
      if not Assigned(PIDL) then
        SHGetSpecialFolderLocation(ParentWnd, CSIDL_DESKTOP, FRelativePIDL)
      else
        FRelativePIDL := PIDL;
      FAbsolutePIDL := FRelativePIDL;
    end else
    { The PIDL is the Root PIDL but is NOT the Desktop namespace  it is a }
    { FULLY QUALIFIED PIDL to a namespace that is to be the Root.         }
    begin
      FAbsolutePIDL := PIDL;
      FRelativePIDL := PIDLMgr.GetPointerToLastID(FAbsolutePIDL);
    end;
  end else
  { If the folder is a child of the desktop special conditions apply see above }
  if PIDLMgr.IsDesktopFolder(AParent.AbsolutePIDL) then
  begin
    FRelativePIDL := PIDL;
    FAbsolutePIDL := PIDL;
  end else
  { Normal building of the PIDLs and Shells }
  begin
    FAbsolutePIDL := PIDLMgr.AppendPIDL(AParent.FAbsolutePIDL, PIDL);
    FRelativePIDL := PIDLMgr.GetPointerToLastID(FAbsolutePIDL);
    PIDLMgr.FreePIDL(PIDL);
  end;
end;
Kann man die Delphi-eigene Memory-Leak-Funktion nicht für gewisse Units ausschalten, fürs restliche Projekt aber behalten?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 12:52
Kann man die Delphi-eigene Memory-Leak-Funktion nicht für gewisse Units ausschalten, fürs restliche Projekt aber behalten?
Nein,

aber man kann "bekannte" Leaks ignorieren lassen.
Delphi-Referenz durchsuchenRegisterExpectedMemoryLeak
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#7

AW: Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 13:00
Klingt kompliziert. Der obige Code sagt bei ReportMemoryLeaks "TNameSpace 2x".
Wie genau muss ich dann RegisterExpectedMemoryLeak nutzen?

Ich habe überall wo ein := TNameSpace.Create vorkommt einfach die neue Instanz eine Zeile danach in ein RegisterExpectedMemoryLeak() gepackt. Der Leak ist noch immer da.

Geändert von DieDolly (22. Feb 2021 um 13:03 Uhr)
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 15:31
In welchem Projekt kommen denn bei dir die Leaks? Ist es eine der Demos? Dann würde ich auch mal testen. Ich benutze VirtualShellTools schon eine ganze Weile, und diese TNamespace-Leaks sind bei mir auch immer mal vorgekommen. Wenn es bei 2 bleibt, kann man das wirklich getrost ignorieren. In letzter Zeit sind die Leaks bei mir aber nicht mehr aufgetreten. Allerdings benutze ich die Variante von PyScripter auf Git-Hub.
Renate
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#9

AW: Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 15:48
Der Leak ist in der Demo "Explorer CheckBoxes" sowie "CheckBoxes".
Ich benutze die neueste Version von TVirtualExplorerTreeView und TVirtualExplorerListView. Der Leak ist nur da, wenn letzteres auf dem Formular ist.
Der Download kommt von MustangpeakVirtualshellTools und der Leak selber ist in der Datei MPShellUtilitis. pyscripter hat soweit ich das sehen kann keinen eigenen Fork. https://github.com/TurboPack/Mustang...etwork/members
  Mit Zitat antworten Zitat
hoika

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

AW: Wie benutzt man MadExcept Memory Leak Detection?

  Alt 22. Feb 2021, 16:03
Hallo,
und zumindestens FastMM4 zeigt dir die beiden Stellen an,
wo das TNameSpace erzeugt wird.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:50 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