Einzelnen Beitrag anzeigen

Shark99

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

Speicherleaks finden mit FastMM4

  Alt 11. Jun 2020, 02: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, 2x aufgerufen)
  Mit Zitat antworten Zitat