Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
prog:lazarus:debug:heaptrc [05/03/2020 16:08] thierry [Améliorations] |
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 MonProg; | program MonProg; | ||
Ligne 44: | 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/]] | ||
+ | |||