Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.461 Beiträge
 
Delphi 7 Professional
 
#14

AW: Speicherleaks finden mit FastMM4

  Alt 12. Jun 2020, 11: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