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.