Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi FastMM5 konfigurieren (https://www.delphipraxis.net/212159-fastmm5-konfigurieren.html)

Hobbycoder 27. Dez 2022 23:53

FastMM5 konfigurieren
 
Hi Leute,

ich tue mich schwer FastMM5 dazu zu bekommen, mir einen detailierten Speicherbericht auszugeben. Ich bekomme lediglich dan kleinen MemoryLeak-Report, den ich auch ohne FastMM bekommen kann.
Irgendwas mache ich falsch.

Was habe ich gemacht:
- FastMM_FullDebugMode.dll ins Ausgabeverzeichnis
- FastMM5.pas im Projektverzeichnis
- FastMM5 als erste Unit in der dpr
- ReportMemoryLeaksOnShutdown:=True in der dpr (oder muss das in die Main-Unit?)

Der MemoryLeak-Report bleibt der gleiche.

Was muss ich jetzt noch machen, damit ich detailierter Informationen bekomme? GGf. auch in eine Ausgabedatei.

jaenicke 28. Dez 2022 00:01

AW: FastMM5 konfigurieren
 
Ich nehme an, dass es die .inc Datei zur Konfiguration auch bei FastMM5 gibt. Darin muss der FullDebugMode aktiviert werden.

Hobbycoder 28. Dez 2022 00:07

AW: FastMM5 konfigurieren
 
Zitat:

Zitat von jaenicke (Beitrag 1516717)
Ich nehme an, dass es die .inc Datei zur Konfiguration auch bei FastMM5 gibt. Darin muss der FullDebugMode aktiviert werden.

Eben nicht. .inc-Datei wie in FastMM4 wird nicht mehr unterstützt.

KodeZwerg 28. Dez 2022 00:42

AW: FastMM5 konfigurieren
 
Zitat:

Zitat von Hobbycoder (Beitrag 1516716)
Was muss ich jetzt noch machen, damit ich detailierter Informationen bekomme?

Wenn ich mich nicht irre,
Delphi-Quellcode:
{$DEFINE FastMM_FullDebugMode}
als erste Zeile in der .dpr Datei.
bzw.
Delphi-Quellcode:
{$DEFINE FastMM_FullDebugModeWhenDLLAvailable}
um mit der dll zusammen zu arbeiten.
Delphi-Quellcode:
{$DEFINE FastMM_DebugLibraryStaticDependency}
um eine Abhängigkeit zur dll zu erzwingen.
Delphi-Quellcode:
{$DEFINE FastMM_EnableMemoryLeakReporting}
zum einschalten des loggins.

Hobbycoder 28. Dez 2022 01:08

AW: FastMM5 konfigurieren
 
Zitat:

Zitat von KodeZwerg (Beitrag 1516719)
Zitat:

Zitat von Hobbycoder (Beitrag 1516716)
Was muss ich jetzt noch machen, damit ich detailierter Informationen bekomme?

Wenn ich mich nicht irre,
Delphi-Quellcode:
{$DEFINE FastMM_FullDebugMode}
als erste Zeile in der .dpr Datei.
bzw.
Delphi-Quellcode:
{$DEFINE FastMM_FullDebugModeWhenDLLAvailable}
um mit der dll zusammen zu arbeiten.
Delphi-Quellcode:
{$DEFINE FastMM_DebugLibraryStaticDependency}
um eine Abhängigkeit zur dll zu erzwingen.
Delphi-Quellcode:
{$DEFINE FastMM_EnableMemoryLeakReporting}
zum einschalten des loggins.

Hab ich drin. Aber keine Änderung. Muss ReportMemoryLeaksOnShutdown:=True; drinbleiben?

Delphi-Quellcode:
program ThreadTest;

uses
  FastMM5,
  Vcl.Forms,
  ThreadTestMain in 'ThreadTestMain.pas' {frmThreadTest},
  uSettings in 'uSettings.pas',
  uRWStream in 'uRWStream.pas',
  uMonitorData in 'uMonitorData.pas',
  uETAComWebserver in 'uETAComWebserver.pas',
  uGetDataFromComSvc in 'uGetDataFromComSvc.pas',
  uETADataWebserver in 'uETADataWebserver.pas',
  uMonitorLogging in 'uMonitorLogging.pas',
  MonLogList in 'MonLogList.pas' {frmMonLogList};
{$DEFINE FastMM_FullDebugMode}
{$DEFINE FastMM_FullDebugModeWhenDLLAvailable}
{$DEFINE FastMM_DebugLibraryStaticDependency}
{$DEFINE FastMM_EnableMemoryLeakReporting}
{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmThreadTest, frmThreadTest);
  Application.CreateForm(TfrmMonLogList, frmMonLogList);
  ReportMemoryLeaksOnShutdown:=True;
  Application.Run;
end.
Ich finde weder eine Logdatei, noch bekomme ich detailiertere Informationen als ohne FastMM5

KodeZwerg 28. Dez 2022 01:15

AW: FastMM5 konfigurieren
 
Zitat:

Zitat von Hobbycoder (Beitrag 1516720)
Muss ReportMemoryLeaksOnShutdown:=True;

Mit
Delphi-Quellcode:
FastMM_EnterDebugMode
austauschen.
Delphi-Quellcode:
FastMM_SetEventLogFilename
mit deinen Wunsch-datei-namen überschreiben. Aber ist schon lange her das ich es ausprobiert hatte, habe mir nur ein paar infos in einem kleinen projekt gesichert und kommentiert :oops:

KodeZwerg 28. Dez 2022 01:16

AW: FastMM5 konfigurieren
 
Zitat:

Zitat von Hobbycoder (Beitrag 1516720)
Zitat:

Zitat von KodeZwerg (Beitrag 1516719)
Zitat:

Zitat von Hobbycoder (Beitrag 1516716)
Was muss ich jetzt noch machen, damit ich detailierter Informationen bekomme?

Wenn ich mich nicht irre,
Delphi-Quellcode:
{$DEFINE FastMM_FullDebugMode}
als erste Zeile in der .dpr Datei.
bzw.
Delphi-Quellcode:
{$DEFINE FastMM_FullDebugModeWhenDLLAvailable}
um mit der dll zusammen zu arbeiten.
Delphi-Quellcode:
{$DEFINE FastMM_DebugLibraryStaticDependency}
um eine Abhängigkeit zur dll zu erzwingen.
Delphi-Quellcode:
{$DEFINE FastMM_EnableMemoryLeakReporting}
zum einschalten des loggins.

Hab ich drin. Aber keine Änderung. Muss ReportMemoryLeaksOnShutdown:=True; drinbleiben?

Delphi-Quellcode:
program ThreadTest;

uses
  FastMM5,
  Vcl.Forms,
  ThreadTestMain in 'ThreadTestMain.pas' {frmThreadTest},
  uSettings in 'uSettings.pas',
  uRWStream in 'uRWStream.pas',
  uMonitorData in 'uMonitorData.pas',
  uETAComWebserver in 'uETAComWebserver.pas',
  uGetDataFromComSvc in 'uGetDataFromComSvc.pas',
  uETADataWebserver in 'uETADataWebserver.pas',
  uMonitorLogging in 'uMonitorLogging.pas',
  MonLogList in 'MonLogList.pas' {frmMonLogList};
{$DEFINE FastMM_FullDebugMode}
{$DEFINE FastMM_FullDebugModeWhenDLLAvailable}
{$DEFINE FastMM_DebugLibraryStaticDependency}
{$DEFINE FastMM_EnableMemoryLeakReporting}
{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmThreadTest, frmThreadTest);
  Application.CreateForm(TfrmMonLogList, frmMonLogList);
  ReportMemoryLeaksOnShutdown:=True;
  Application.Run;
end.
Ich finde weder eine Logdatei, noch bekomme ich detailiertere Informationen als ohne FastMM5

Die {$DEFINEs} müssen ÜBER der uses.

himitsu 28. Dez 2022 02:53

AW: FastMM5 konfigurieren
 
Egal ob vor oder nach dem USES,
innerhalb des Projekts werden DEFINEs niemals über Grenzen von Units hinweg durchgereicht.

Aber man kann es in den Projektoptionen eintragen, also von außerhalb, als Parameter des Compilers.
> Erzeugen > Delphi-Compiler > Bedingungen

jaenicke 28. Dez 2022 10:01

AW: FastMM5 konfigurieren
 
Zitat:

Zitat von Hobbycoder (Beitrag 1516718)
Eben nicht. .inc-Datei wie in FastMM4 wird nicht mehr unterstützt.

Das stimmt nicht. Ich hatte allerdings vergessen, dass man dafür FastMM_IncludeLegacyOptionsFile setzen muss. Dann wird die gleiche FastMM4Options.inc Datei geladen. Ich hatte schlicht dieses ifdef im Code deaktiviert, so dass diese Datei bei mir immer geladen wird. Deshalb hatte ich daran nicht mehr gedacht.

Hobbycoder 28. Dez 2022 14:47

AW: FastMM5 konfigurieren
 
Hab's jetzt so:
Delphi-Quellcode:
program ThreadTest;

{$DEFINE FastMM_FullDebugMode}
{$DEFINE FastMM_FullDebugModeWhenDLLAvailable}
{$DEFINE FastMM_DebugLibraryStaticDependency}
{$DEFINE FastMM_EnableMemoryLeakReporting}

uses
  FastMM5,
  Vcl.Forms,
  ThreadTestMain in 'ThreadTestMain.pas' {frmThreadTest},
  uSettings in 'uSettings.pas',
  uRWStream in 'uRWStream.pas',
  uMonitorData in 'uMonitorData.pas',
  uETAComWebserver in 'uETAComWebserver.pas',
  uGetDataFromComSvc in 'uGetDataFromComSvc.pas',
  uETADataWebserver in 'uETADataWebserver.pas',
  uMonitorLogging in 'uMonitorLogging.pas',
  MonLogList in 'MonLogList.pas' {frmMonLogList};
{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmThreadTest, frmThreadTest);
  Application.CreateForm(TfrmMonLogList, frmMonLogList);
  FastMM_SetEventLogFilename('D:\Projects\ETA-Monitor\Win32\Debug\MM.log');
  FastMM_EnterDebugMode;
  Application.Run;
end.
Keine Meldung, keine Logdatei

Bernhard Geyer 28. Dez 2022 15:37

AW: FastMM5 konfigurieren
 
Wie schon gesagt:
Egal ob vor oder nach dem USES,
innerhalb des Projekts werden DEFINEs niemals über Grenzen von Units hinweg durchgereicht.

hoika 28. Dez 2022 15:56

AW: FastMM5 konfigurieren
 
Hallo,
wie weiter oben geschrieben wurde.

DEFINES gelten immer nur pro Datei.
Das muss unter Projekt-Optionen rein.

Danke Bernhard. ;)

generic 28. Dez 2022 22:18

AW: FastMM5 konfigurieren
 
Ich würde es sowieso in die Projekt-Optionen setzen, da man sicherlich Produktions-Kompilate nicht im FullDebug laufen lassen möchte.
Daher ist ein guter Platz in den DEBUG-Einstellungen und bei PROD bleibt dann die Definition halt weg.

Es gibt übrigens ein Video von mir zu FastMM4:
https://www.youtube.com/watch?v=o0yZgQoV8MA

haentschman 23. Okt 2023 07:39

AW: FastMM5 konfigurieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...8-)

...ich hänge mich auch mal dran. :wink:

Zitat:

Keine Meldung, keine Logdatei
...so sieht es bei mir auch aus. :? Auch mit FastMM4 wurde kein Log mehr geschrieben. Ich weiß bis heute nicht woran das liegt. :?

Die Anleitung befolgt. Alle Tipps in diesem Thread befolgt. Mit {$DEFINE FastMM_IncludeLegacyOptionsFile} die alte .inc "aktiviert"...nix. :evil:

Ich bin für Ideen dankbar.

PS: "Früher" hatte die FastMM4 mal ein Log geschrieben...irgendwann, als ich es brauchte, nichtmehr.
PS: MadExcept auskommentiert

Nachtrag:
Eine Meldung kommt nur wenn das "ReportMemoryLeaksOnShutdown := True;" gesetzt ist. Ich meine, daß das früher entweder oder war...FastMM oder ReportMemoryLeaksOnShutdown. :gruebel:

Rolf Frei 23. Okt 2023 18:11

AW: FastMM5 konfigurieren
 
Die FastMM_FullDebugMode.dll befindet sich aber schon im selben Ordner wie deine EXE oder? Diese muss für die Erstellung eines Logfiles vorhanden sein.

himitsu 23. Okt 2023 19:47

AW: FastMM5 konfigurieren
 
Delphi-Referenz durchsuchenReportMemoryLeaksOnShutdown steuert den internen FastMM.
Wird ein anderer oder gar externer MM verwendet, dann hat diese Option natürlich keine Wirkung. (bzw. nicht die, welche geplant ist)

haentschman 24. Okt 2023 08:07

AW: FastMM5 konfigurieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...8-)
Zitat:

Die FastMM_FullDebugMode.dll befindet sich aber schon im selben Ordner wie deine EXE oder?
...selbstverständlich. :wink:

Die DLL wird auch geladen und initialisiert. :zwinker: (lt. Debugger in FastMM.pas)
...sonst passiert aber nix. :cry:

Nachtrag mit bewußtem Leak:
GIT vom FastMM auf FastMM4 zurückgesetzt. Version4 geht wieder. :zwinker: Version5 nicht.

himitsu 24. Okt 2023 09:29

AW: FastMM5 konfigurieren
 
Früher mußte man noch in der einen *.INC einstellen, was man haben wollte.
Weiß nicht, ob's die noch gibt, oder ob's dafür inzwischen auch teilweise Optionen gibt.

haentschman 24. Okt 2023 09:53

AW: FastMM5 konfigurieren
 
Die alte .inc geht auch...sollte jedenfalls. :gruebel:
Delphi-Quellcode:
{Optionally import the legacy version 4 defines.}
{$ifdef FastMM_IncludeLegacyOptionsFile}
  {$Include FastMM4Options.inc}
{$endif}
...irgendetwas fehlt. :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 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