Ceci est une ancienne révision du document !
HeapTrc et gestion de la mémoire
HeapTrc permet de détecter des éventuelles “fuites” de mémoire lors du débuggage.
HeapTrc
Activation
Résultat
A la fin de l'execution du programme on obtient une fenetre de ce style
O unfreed memory blocks : 0
= OK tout va bien !
Améliorations
N'Afficher que si il y a des erreurs
Si vous ne voulez pas voir la fenêtre de sortie quand tout va bien, juste quand il y a des erreurs, il vous faudra mettre ce bout de code dans le fichier .lpr
de votre projet
{$if declared(useHeapTrace)} globalSkipIfNoLeaks := true; {$endIf}
Vue d'ensemble :
- MonProg.lpr
program MonProg; {$mode objfpc}{$H+} uses {$IFDEF UNIX} {$IFDEF UseCThreads} cthreads, {$ENDIF} {$ENDIF} Interfaces, // this includes the LCL widgetset Forms, uMainForm; {$R *.res} begin {$if declared(useHeapTrace)} globalSkipIfNoLeaks := true; {$endIf} RequireDerivedFormResource := True; Application.Scaled := True; Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
THeapStatus
THeapStatus sert a récuperer les infos sur la mémoire utilisée par le programme
Déclaration
dans l'unité (???) heaph.inc
THeapStatus = record TotalAddrSpace: Cardinal; TotalUncommitted: Cardinal; TotalCommitted: Cardinal; TotalAllocated: Cardinal; TotalFree: Cardinal; FreeSmall: Cardinal; FreeBig: Cardinal; Unused: Cardinal; Overhead: Cardinal; HeapErrorCode: Cardinal; end;
Utilisation
Var FHeap: THeapStatus; procedure TForm1.WriteHeapStatus; begin FHeap := GetHeapStatus; // A appeler à chaque fois que l'on veut lire les données writeln(format('TotalAllocated:%d (%d)', [FHeap.TotalAllocated, FHeap.TotalAllocated - FLastAllocated])); writeln(format('TotalFree:%d (%d)', [FHeap.TotalFree, FHeap.TotalFree - FLastFree])); FLastFree := FHeap.TotalFree; FLastAllocated := FHeap.TotalAllocated; end;
Voir aussi
Vous pourriez laisser un commentaire si vous étiez connecté.