Routines d’aide au débuggage pour la gestion de la mémoire vive en C

Utilisation

Avant toutes choses

Apres avoir généré un objet ou une librairie avec le source GestMem.c, l'utilisateur doit simplement inclure le fichier GestMem.h au début de tous ses sources et lier l'ensemble de ses objets avec l'objet ou la librairie dérivant de GestMem.c.

Utilisation simple

L'utilisateur, s'il le souhaite peut alors placer l'appel de TesterMemoire() dans son source. Généralement cet appel se fait juste avant de sortir du programme pour vérifier que tous les pointeurs ont bien étés libérés. Cependant cette routine peut être utilisée à tout moment. Elle se contente d'afficher sur la sortie d'erreur standard la liste des pointeurs qui ont été alloués mais pas libérés. Cette action ne se fait que si aucun écrasement n'est détecté. Si un écrasement est détecté, alors cette fonction fera appel à la fonction de terminaison abort ou a une autre fonction définie par l'utilisateur.

Le programmeur peut continuer à écrire son source normalement en croyant utiliser les fonctions de la librairie C standard.

A chaque fois qu'un pointeur est libéré (avec la fonction free) ou réalloué (avec la fonction realloc), les routines vont d'abord regarder si le pointeur donné en argument n'est pas écrasé. Si c'est le cas la main sera rendue à l'utilisateur normalement ; sinon, les routines signaleront qu'elles ont détecté un écrasement, afficheront le nom du source, le numéro de la ligne de la fonction qui a permis de détecter l'erreur ainsi que le nom du source (tronqué à 30 caractères) et le numéro de la ligne de la fonction qui a réalisé l'allocation. Ensuite cette fonction appellera une fonction que l'utilisateur pourra surcharger (par défaut : abort).

Utilisation avancée


Pour pouvoir modifier le comportement par défaut, il est nécessaire de comprendre comment fonctionnent ces routines (Cf. Fonctionnement)

 

Suppression de l’utilisation des routines modifiées.


Lorsque le programme est au point, l'utilisateur a deux possibilités :

Modification de la fonction appelé par défaut après un écrasement.

Lorsque les routines détectent un écrasement mémoire, elles affichent un message d'erreur puis appellent la fonction dont le nom est défini par la constante ABORT_FCT. Pour appeler une autre fonction, l'utilisateur doit écrire cette fonction, puis affecter à la constante ABORT_FCT le nom de cette fonction, avant l'inclusion de GestMem.h ( avec cc : cc -DABORT_FCT=Fonction). Cette fonction ne doit rien renvoyer et n'attendre aucun paramètre.

Exemple :

Dans un source

void FctRien (void)
{
printf(" Fonction qui remplace abort ….\n ") ;
}

Puis compiler et relier tous les sources en définissant ABORT_FCT avec FctRien.

Modification du nombre des octets de bourrage

Pour modifier le nombre d' octets de bourrages (par défaut 50) il suffit de modifier la constante TFILL_ALLOC_SECOURS avant de recompiler (et de relier) tous les sources.
( avec cc : cc -DTFILL_ALLOC_SECOURS=nombre). Cette constante doit de toute façon être positive ou nulle.

Routines d’aide au débuggage pour la gestion de la mémoire vive en C