AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Speicherleaks finden mit FastMM4

Ein Thema von Shark99 · begonnen am 11. Jun 2020 · letzter Beitrag vom 17. Jun 2020
Antwort Antwort
Seite 1 von 3  1 23   
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#1

Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 01:43
Delphi-Version: 7
Kann mir bitte jemand erklären wie genau die Speicherlecksuche mit FastMM4 funktioniert?

Ich habe in FastMM4Options.inc die Optionen EnableMemoryLeakReporting und FullDebugMode aktiviert.

Beispielcoder erzeugt der paar Bytes Speicher leaked. Am Ende der Ausführung bekomme ich die Meldung, dass Speicher geleakt wurde.
Details dazu stehen in der LogDatei.

Wenn ich jedoch die LogDatei anschaue finde ich (für mich persönlich) keinerlei nützliche Info die mir helfen würde den Ort des Speicherlecks zu finden.
Das Testprogramm zeigt die (zufällige) Adresse des Pointers der nicht freigegeben wird als $19FB70. In der LogDatei bekomme einen Stack Trace der mich gar nicht weiter bringt, und einen Speicherauszug von Adresse $7FE35550, die auf dem ersten Blick auch nichts mit dem Leck zu tun hat.

Hat jemand von euch vielleicht Tips um die Codezeile mit dem Leak zu finden?

Beispielcode inkl FastMM4 mit kompilierter Exe ist angehängt.
Delphi-Quellcode:
var
  Form1: TForm1;

const data = #255#255#255#255#255#255#255#255#255;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var p: PChar;
begin
  GetMem(p, SizeOf(Data)+1);
  p := data;
  Caption := '$'+IntToHex(Integer(Addr(p)), 1)+':'+p;
end;
Delphi-Quellcode:
--------------------------------2020/6/11 2:38:16--------------------------------
A memory block has been leaked. The size is: 12

This block was allocated by thread 0x76F0, and the stack trace (return addresses) at the time was:
402D38
451AE4
4496D3
44C6A6
432337
77551031 [RtlCaptureStackBackTrace]
426C41
742C9FCB [SE_GetProcAddressForCaller]
426C41
742C9FE3 [SE_GetProcAddressForCaller]
742CA00D [SE_GetProcAddressForCaller]

The block is currently used for an object of class: Unknown

The allocation number is: 355

Current memory dump of 256 bytes starting at pointer address 7FE35550:
8C 7C 45 00 80 DC 9A 65 A5 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Œ | E . € Ü š e ¥ € € € € € € € . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

--------------------------------2020/6/11 2:38:16--------------------------------
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):

5 - 12 bytes: Unknown x 1

Note: Memory leak detail is logged to a text file in the same folder as this application. To disable this memory leak check, undefine "EnableMemoryLeakReporting".
Angehängte Dateien
Dateityp: rar MemLeakTest.rar (293,6 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
hoika
Online

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.749 Beiträge
 
Delphi XE4 Professional
 
#2

AW: Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 05:04
Hallo,
die externen Debug-Optionen einschalten (bei den Linker-Optionen zu finden)
Heiko

Geändert von hoika (11. Jun 2020 um 05:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
7.653 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 05:05
Du hast keine Debuginformationen einkompiliert (sieht man an DebugInfo=0 in der .dof Datei). Ohne bekommst du auch keinen Stacktrace.

In aktuelleren Delphiversionen ist FastMM übrigens schon in Delphi integriert.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
2.408 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 09:08
In aktuelleren Delphiversionen ist FastMM übrigens schon in Delphi integriert.
Himi ist ja auch so ein Kandidat, der das immer wieder schreibt, aber ihr wisst es doch alle eigentlich besser.
Nur mit dem aufgebohrten FastMM per externer Unit+Inc und Debug-DLL bekommt man aussagekräftige Log-Dateien und Warnungen, wenn Speicher durch Überschreiben korrumpiert wird.
Das bisschen an Information das per MessageBox vom integrierten FastMM durch ReportMemoryLeaksOnShutdown := True; ggf. gezeigt wird, ist ja nur die Spitze des Eisberges und würde sogar in dem Beispielfall hier null weiterhelfen.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.244 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 10:37
Kennst du mein Video?

Von 0 auf 100 - FastMM4 - Ein Speichermanager für Delphi
https://www.youtube.com/watch?v=o0yZgQoV8MA
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
358 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 15:07
Außerdem gibt es doch seit Kurzem FastMM5 ohne die Inc-Datei.
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#7

AW: Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 16:00
Es gibt auch eine AVX Version von FastMM4: https://github.com/maximmasiutin/FastMM4-AVX
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
358 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 16:09
Ja, aber die ist 2 Jahre alt (Mai 2018). FastMM5 ist von Grund auf neu geschrieben, wie da steht, da sollte FastMM4 obsolet sein.
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#9

AW: Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 18:31
MM5 geht imho erst ab XE3. FastMM4-AVX ist eine gute Alternative um alten Projekten einen Performance Boost zu geben.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
1.921 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Speicherleaks finden mit FastMM4

  Alt 12. Jun 2020, 09:47
Kennst du mein Video?

Von 0 auf 100 - FastMM4 - Ein Speichermanager für Delphi
https://www.youtube.com/watch?v=o0yZgQoV8MA
Das Video habe ich gesehen, war sehr hilfreich und ich habe es dann erfolgreich in der erweiterten Variante umsetzen können und so ein paar Memory-Leaks schließen können, die ich mit der einfachen Variante nicht ausfindig machen konnte.

Eine Frage in diesem Zusammenhang:

Die MemoryManager_EventLlog Datei war über 1 MB groß, häufiger mit doppelten Einträgen. Gibt es eigentlich ein Tool, welches die Einträge auswertet und dann die Unit öffnet und zur Zeile springt, wo der Speicherverbrauchende Prozess erzeugt wurde? Denn manuell das alles zu sichten, war schon sehr unkomfortabel...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf