AGB  ·  Datenschutz  ·  Impressum  







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

Speicherleaks finden mit FastMM4

Ein Thema von Shark99 · begonnen am 11. Jun 2020 · letzter Beitrag vom 17. Jun 2020
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#1

AW: Speicherleaks finden mit FastMM4

  Alt 12. Jun 2020, 11:01
Schau mal bitte dort: GitHub: jcl/jcl/experts/stacktraceviewer/APIExamples/FastMM/

Eventuell kannst Du damit was anfangen.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.546 Beiträge
 
Delphi 12 Athens
 
#2

AW: Speicherleaks finden mit FastMM4

  Alt 12. Jun 2020, 11:24
Schau mal bitte dort: GitHub: jcl/jcl/experts/stacktraceviewer/APIExamples/FastMM/

Eventuell kannst Du damit was anfangen.
Da braucht man wohl die JCL zu. JEDI-Komponenten verwende ich aber nicht (aus Gründen der "Komponentensparsamkeit")...

Aber evtl. gibt es die fertige Exe irgendwo als Download?

Geändert von Harry Stahl (12. Jun 2020 um 11:58 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#3

AW: Speicherleaks finden mit FastMM4

  Alt 12. Jun 2020, 12:10
Und wenn Du Dir die Mühe machst, Dir das mal anzuschauen, wirst Du feststellen, dass das die JCL ist und diese (bekanntermaßen) keine Komponenten enthält und Du daher dafür auch keine Komponenten sparen musst.

Es handelt sich um einen Experten für die IDE. Den musst Du dann schon kompilieren und installieren.

Man könnte sich aber auch einfach mal die Quellen anschauen, um zu sehen, wie die das machen und dann eine eigene Lösung finden. Nur so als Idee

In meinem Log muss ich übrigens nur nach den Zeilen suchen, die mit einer in eckigen Klammern eingefassten Zahl enden.

Sieht z. B. so aus:
Code:
6A8ED2 [e:\Delphi\Indy10\Lib\Core\IdThreadSafe.pas][IdThreadSafe][TIdThreadSafe.Create][253]
Das kann man dann auch per eigenem Programm, Script, ... auswerten.

Hab' mir mal eben für meinen Editor ein PascalScript geschrieben:
Delphi-Quellcode:
program Test;
var
        i : Integer;
        sl : TStringList;
        s : String;
begin
  sl := TStringList.Create;
  sl.LoadFromFile('Programmname_MemoryManager_EventLog.txt');
  for i := sl.Count - 1 downto 0 do begin
    sl[i] := ReverseString(sl[i]);
    if Copy(sl[i],1,1) = ']then begin
      s := Copy(sl[i],2,Length(sl[i]));
      s := Copy(s,1,Pos('[',s) - 1);
      if StrToIntDef(s,-1) <> -1 then sl[i] := ReverseString(sl[i]) else sl.Delete(i);
    end else sl.Delete(i);
  end;
  sl.Sort;
  for i := sl.Count - 1 downto 1 do if sl[i] = sl[i - 1] then sl.Delete(i);
  sl.SaveToFile('Programmname_MemoryManager_EventLog.txt.report');
  sl.Free;
end.
Damit hab' ich dann eine Datei, in der alle Zeilen stehen, die ich mir anschauen muss. Sieht so aus:
Code:
690647 [e:\Delphi\Indy10\Lib\System\IdStack.pas][IdStack][IdStack][1225]
69F22B [e:\Delphi\Indy10\Lib\Core\IdIOHandler.pas][IdIOHandler][TIdIOHandler.SetDefaultClass][910]
69F296 [e:\Delphi\Indy10\Lib\Core\IdIOHandler.pas][IdIOHandler][TIdIOHandler.RegisterIOHandler][953]
6A8EB6 [e:\Delphi\Indy10\Lib\Core\IdThreadSafe.pas][IdThreadSafe][TIdThreadSafe.Create][251]
6A8ED2 [e:\Delphi\Indy10\Lib\Core\IdThreadSafe.pas][IdThreadSafe][TIdThreadSafe.Create][253]
6A9079 [..\..\Indy10\Lib\Core\IdThread.pas][IdThread][IdThread][730]
War ungefähr 10 Minuten Aufwand

Datei analysieren, benötigte Informationen erkennen. Script schreiben, das diese raussucht und speichert.

Mit dem Ergebnis muss man dann auf die Suche gehen. Das kann dann schonmal was länger dauern

PS:

in der FastMM4Options.inc hab' ich
Delphi-Quellcode:
{$define LogMemoryLeakDetailToFile}
{$define EnableMemoryLeakReportingUsesQualifiedClassName}
{$define ClearLogFileOnStartup}
aktiviert.

Musst halt mal schauen, was da für Dich die sinnvollste Ausgabe ist.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.546 Beiträge
 
Delphi 12 Athens
 
#4

AW: Speicherleaks finden mit FastMM4

  Alt 12. Jun 2020, 12:40
@Delphi.Narium

Zu JCL/Jedi: Neben Komponentensparsamkeit gilt für mich auch eine Expertensparsamkeit, außer GExperts verwende ich da nichts (jedenfalls in den aktuellen Delphi-Versionen, in älteren Delphi-Versionen notgedrungen auch CNPack). Sonst nur externe Experten (z.B. Pascal-Analyser).

Zu Deinem Excerpt: Ja prima, damit komme ich zurecht.
  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 05:13 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 by Thomas Breitkreuz