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/]] | ||
| + | |||