Détection de malloc
Malloc Detect fournit une extension facultative de signalement et de détection des erreurs au sous-système malloc . Les informations sur les erreurs qui se sont produites dans l'environnement malloc seront signalées et des actions peuvent être effectuées, si spécifié.
Malloc Detect peut être divisé en trois capacités distinctes:
- Détection d'une erreur
- Signalement de l'erreur à l'aide de stderr
- Signalement de l'erreur à l'aide d'une fonction définie par l'application
Détection d'une erreur
Certaines erreurs du sous-système malloc sont faciles à détecter. Les erreurs telles que la libération d'un pointeur qui n'est pas une adresse de segment de mémoire valide sont détectées de manière synchrone dans le chemin de code de la mémoire libre. Cependant, les erreurs causées par des événements asynchrones, tels que la corruption de segment de mémoire, sont beaucoup plus difficiles à identifier. L'option
check_arena de Malloc Detect est conçue pour rechercher ce type d'altération sur une base synchrone. A chaque appel d'une API de sous-système malloc , une vérification des structures de données internes est effectuée. Si une altération est détectée, elle est signalée à l'application. Cela fournit un autre point dans le temps avec lequel déboguer ces problèmes difficiles. L'option check_arena peut être activée en définissant la variable d'environnement MALLOCDEBUG comme suit:MALLOCDEBUG=checkarenaSignalement d'une erreur à l'aide de stderr
La méthode normale pour signaler les erreurs dans le sous-système malloc consiste à utiliser la valeur de retour et la variable d'environnement errno. L'option
verbose de Malloc Detect permet d'imprimer ces erreurs dans le flux d'erreurs standard du programme d'application. Cela offre un moyen plus visible et plus détaillé de signaler les erreurs dans malloc. L'option prolixe peut être activée en définissant la variable d'environnement MALLOCDEBUG comme suit:MALLOCDEBUG=verbose|Génération d'un rapport d'erreur à l'aide d'une fonction définie par l'application
Malloc Detect permet également à l'utilisateur de fournir une fonction que le sous-système malloc appelle chaque fois qu'il rencontre une erreur. Malloc Report appelle la fonction fournie par l'application, attend un retour, puis revient comme d'habitude. Cette fonction permet à l'application d'effectuer toutes les tâches de débogage nécessaires avant d'autoriser la poursuite du programme. Pour activer cette fonction, l'application doit définir la valeur d'un pointeur de fonction globale malloc_err_function égale à la valeur de la routine d'erreur de l'application. Par exemple :
extern void (*malloc_err_function)(int, ...)
malloc_err_function = &application_malloc_err_hdlRestrictions
La fonction de débogage de Malloc Detect est compatible avec les stratégies et options malloc suivantes: