Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
prog:lazarus:debug:heaptrc [05/03/2020 16:06]
thierry créée
prog:lazarus:debug:heaptrc [05/04/2020 14:41] (Version actuelle)
thierry [HeapTrc]
Ligne 1: Ligne 1:
-====== HeapTrc ======+====== HeapTrc ​et gestion de la mémoire ​======
 HeapTrc permet de détecter des éventuelles "​fuites"​ de mémoire lors du débuggage. HeapTrc permet de détecter des éventuelles "​fuites"​ de mémoire lors du débuggage.
-===== Activation =====+===== HeapTrc ===== 
 + 
 +==== Activation=====
 Dans ''​Options pour le Projet'',​ partie ''​Débogage'',​ cocher la case ''​Utiliser l'​unité HeapTrc''​ Dans ''​Options pour le Projet'',​ partie ''​Débogage'',​ cocher la case ''​Utiliser l'​unité HeapTrc''​
 {{:​prog:​lazarus:​debug:​heaptrc2.png|}} {{:​prog:​lazarus:​debug:​heaptrc2.png|}}
-===== Résultat ​=====+==== Résultat ====
 A la fin de l'​execution du programme on obtient une fenetre de ce style A la fin de l'​execution du programme on obtient une fenetre de ce style
 {{:​prog:​lazarus:​debug:​heaptrc1.png|}} {{:​prog:​lazarus:​debug:​heaptrc1.png|}}
 ''​O unfreed memory blocks : 0''​ = OK tout va bien ! ''​O unfreed memory blocks : 0''​ = OK tout va bien !
-===== Améliorations =====+==== 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 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
 <code delphi> <code delphi>
Ligne 16: Ligne 20:
 </​code>​ </​code>​
 Vue d'​ensemble : Vue d'​ensemble :
-<code delphi>​ +<code delphi ​ ​MonProg.lpr
-program ​DiskOperator;+program ​MonProg;
  
 {$mode objfpc}{$H+} {$mode objfpc}{$H+}
Ligne 29: Ligne 33:
   Interfaces, // this includes the LCL widgetset   Interfaces, // this includes the LCL widgetset
   Forms,   Forms,
-  ​uDiskOperationsTIC { you can add units after this }, +  ​uMainForm;
-  uDOMain, +
-  uTICWMISync,​ +
-  uVariantsTIC;+
  
 {$R *.res} {$R *.res}
Ligne 38: Ligne 39:
 begin begin
   {$if declared(useHeapTrace)}   {$if declared(useHeapTrace)}
-  //globalSkipIfNoLeaks := true; // supported as of debugger version 3.2.0+  globalSkipIfNoLeaks := true;
   {$endIf}   {$endIf}
   RequireDerivedFormResource := True;   RequireDerivedFormResource := True;
Ligne 47: Ligne 48:
 end.                  end.                 
 </​code>​ </​code>​
 +===== THeapStatus =====
 +THeapStatus sert a récuperer les infos sur la mémoire utilisée par le programme
 +==== Déclaration ====
 +dans l'​unité (???)  heaph.inc
 +<code delphi>
 +  THeapStatus = record
 +    TotalAddrSpace:​ Cardinal;
 +    TotalUncommitted:​ Cardinal;
 +    TotalCommitted:​ Cardinal;
 +    TotalAllocated:​ Cardinal;
 +    TotalFree: Cardinal;
 +    FreeSmall: Cardinal;
 +    FreeBig: Cardinal;
 +    Unused: Cardinal;
 +    Overhead: Cardinal;
 +    HeapErrorCode:​ Cardinal;
 +  end;
 +</​code>​
 +==== Utilisation ====
 +
 +<code delphi>
 +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;
 +
 +</​code>​
 +
 +
 +===== 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/​]]
 +