====== HeapTrc et gestion de la mémoire ====== HeapTrc permet de détecter des éventuelles "fuites" de mémoire lors du débuggage. ===== HeapTrc ===== ==== Activation===== Dans ''Options pour le Projet'', partie ''Débogage'', cocher la case ''Utiliser l'unité HeapTrc'' {{:prog:lazarus:debug:heaptrc2.png|}} ==== Résultat ==== A la fin de l'execution du programme on obtient une fenetre de ce style {{:prog:lazarus:debug:heaptrc1.png|}} ''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 : 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 ===== * [[https://wiki.freepascal.org/heaptrc]] * [[https://wiki.freepascal.org/leakview]] * [[https://www.developpez.net/forums/blogs/600183-gvasseur58/b2107/gestion-fuites-memoire-lazarus/]]