OBS/Adminhilfe/MemoryLeak

Aus OBS Wiki
Version vom 6. Mai 2020, 21:19 Uhr von Thiel (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
Für diese Seite wurde eine Zugriffsbeschränkung eingerichtet. Falls du diese Nachricht siehst, bist du nicht berechtigt, diese Seite einzusehen.

Dies ist eine zugriffsgeschützte Seite.


Admin-Hilfe

OBS-Administration / Installation
kundenspezifische Anpassungen
OBS Protokolle
Shop-Administration

MemoryLeaks

Hier finden Sie eine Sammlung von Tools zur Speicherüberwachung (Memory Manager) und deren verwendung

FastMM

FastMM dient zum protokollieren und unterstützt beim Finden von MemoryLeaks.

Anwendung

Zum aktivieren reicht es "fastMM4" als erste Unit in der Uses-Sektion der Projekt .dpr zu platzieren.

Wenn nun ein Projekt gestartet wird, fängt FastMM automatisch an den Speicher zu überwachen. (sehr Performancelastig)

ACHTUNG: Da sehr Perfomancelasting niemals beim erstellen von Stables oder Unsatbles aktiv haben!

Beim Regulären verlassen der Anwendung (kein Strg+F2) wird eine LogDatei im Root abgelegt (obs_MemoryManager_EventLog.txt) in der die gefundenen Leaks samt CallStack protokolliert werden (direkter Support der MadExcept "stack tracing library")

Fastmm CallStack.png

Am Ende der Datei ist eine Zusammenfassung zu finden:

Fastmm Summary.png

Es empfiehlt sich erst die Zusammenfassung nach auffällig häufig vorkommenden Klassen zu prüfen (z.B.: xTx_DebugLine) und damit dann die Datei zu durchsuchen.

HINWEIS: Viele der Delphiinternen Klassen (Unicodestring, System.Classes.TList, ...) die in der Zusammenfassung zu finden sind, sind FolgeLeaks von unseren Klassen

Ausnahmen Registrieren

Um Leaks, die nicht zu vermeiden sind zu ignorieren, können diese mit MyRegisterExpectedMemoryLeak aus G_MadExcept registriert werden.

ACHTUNG: Registrieren von "harmlosen" MemoryLeaks muss mit vorsicht genutzt werden!

Beispiel: - global erzeugte Klassen in Initialization von lib_Login GL_UserLog := TLoginData.Create(); MyRegisterExpectedMemoryLeak(GL_UserLog);

In finalization wird die Freigabe zwar korrekt implementiert, aber das Programmende kommt vor der eigentliche Freigabe der Variable.

Installation

Die Neuste Version ist unter zu finden: \\obs-development\Freigaben\OBS_Programm_Update_XE\OBS_SOURCE\Neue Libs\FastMM.zip

und muss in den lokalen Lib-Ordner kopiert werden: c:\Bergau\OBS\dev\lib\

Der Pfad zu FastMM muss in den Bibliotheks- und Suchpfade hinterlegt werden: $(BDSUSERDIR)\lib\FastMM

FastMM_FullDebugMode.dll

Damit die Protokollierung vollständig funktioniert muss die DLL aus \\obs-development\Freigaben\OBS_Programm_Update_XE\OBS_SOURCE\Neue Libs\FastMM.zip\FastMM\FullDebugMode DLL\FastMM_FullDebugMode.dll in das Rootverzeichnis des Projektes Kopiert werden (z.B.: c:\Bergau\OBS\dev\projekte\OBS\)

Diese kann bei Bedarf über c:\Bergau\OBS\dev\lib\FastMM\FullDebugMode DLL\FastMM_FullDebugMode.dpr neu compiliert werden. Dies wird teilweise nötig, wenn die FastMM4Options.inc angepasst werden muss. Zum Beispiel zum deaktivieren vom Define DisableLoggingOfMemoryDumps (zusätzliches Protokollieren von Speicherbereichen in der txt)