Outils de débogage pour le C sur une plate-forme Linux

Gazette Linux n°100 - Mars 2004

Nikhil Bhargava

Article paru dans le n°100 de la Gazette Linux de mars 2004.

Traduction française par Isabelle Hurbain .

Relecture de la traduction française par Joëlle Cornavin .

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières
1. Dmalloc
2. Valgrind
3. ElectricFence
4. GDB
5. Insight
6. Memprof

Cet article traite des outils de débogage pour les applications C sur les plates-formes Linux. La plupart des outils sont disponibles gratuitement sur toutes les plates-formes majeures et disposent d'une assistance utilisateur très large. Les outils aident à analyser statiquement et évaluer dynamiquement le code.

Notez que les outils présentés ici sont des suggestions de l'auteur. Cette liste n'est pas standard. Il convient d'y apporter des changements en fonction de la nature, de la portée et des détails de l'application à développer.


1. Dmalloc

La bibliothèque d'allocation mémoire pour le débogage, ou Dmalloc, est un outil de débogage du domaine public conçu spécialement pour remplacer les routines de gestion de mémoire du système comme malloc, realloc, calloc, free et autres, tout en fournissant des fonctions de débogage puissantes configurables pendant l'exécution. Elle apporte des changements pendant la compilation et n'ajoute pas de modifications au moment de l'exécution dans le binaire. Ces fonctions comprennent entre autres un traçage des fuites de mémoire, une détection des écritures après les bornes, un rapport indiquant fichiers et numéros de ligne et une journalisation générale des statistiques. La bibliothèque est raisonnablement portable puisqu'elle a déjà fonctionné sur au moins les systèmes d'exploitation suivants : AIX, BSD/OS, DG/UX, Free/Net/OpenBSD, GNU/Hurd, HPUX, Irix, Linux, MS-DOS, NeXT, OSF, SCO, Solaris, SunOS, Ultrix, Unixware, Windows et même Unicos sur un Cray T3E. Elle prend complètement en charge le débogage des programmes utilisant les fils d'exécution (threads) POSIX.

Ce paquetage inclut la bibliothèque, les scripts de configuration, une application de débogage, un programme de test et de la documentation.


2. Valgrind

Valgrind est un système distribué sous GPL pour déboguer et profiler des programmes Linux x86. Il peut également être utile pour des programmes sur des plates-formes autres que x86, car le comportement d'un binaire x86 est similaire à celui d'autres binaires. Les outils accompagnant Valgrind détectent automatiquement de nombreux bogues de gestion de mémoire et de fils d'exécution, ce qui évite des heures de chasse aux bogues frustrante et rend les programmes plus stables. Il prend également en charge un profilage très détaillé pour aider à accélérer les programmes.

La distribution Valgrind comporte quatre outils : deux détecteurs d'erreurs mémoire, un détecteur d'erreurs de fils d'exécution et un profileur de cache.


3. ElectricFence

ElectricFence est une bibliothèque du domaine public que l'on peut utiliser pour la programmation et le débogage du C. Elle peut être liée au moment de la compilation et avertira de problèmes possibles comme la libération de mémoire qui n'existe pas, etc. C'est principalement un outil de profilage de mémoire. Cependant, il n'est disponible actuellement que sur la plate-forme HP-Unix (je n'en suis d'ailleurs pas très sûr).


4. GDB

C'est le débogueur GNU inclus en tant que paquetage du domaine public dans des distributions Linux gratuites comme Red Hat, Slackware, Debian, etc. Il offre une prise en charge complète de nombreux langages comme C, C++, Perl, etc. Il aide à déboguer les binaires de ces langages avec des modes comme le mode pas à pas, l'exécution de plusieurs étapes ou l'exécution complète. Il peut également poser des points d'arrêts et tracer des valeurs.

Il est utile pour tester des morceaux de code, contrôler les flux fonctionnels et contrôler les bornes. De plus, il est fourni avec toutes les versions des plates-formes Linux et Unix, et est largement utilisé dans la communauté.


5. Insight

Insight est une interface graphique à GDB, le débogueur de GNU, écrite en Tcl/Tk par Red Hat Inc. et Cygnus Solutions (qui fait maintenant partie de Red Hat). Insight offre toutes les fonctionnalités prévues par GDB ainsi qu'une interface graphique de débogage, qui remplace la traditionnelle interface en ligne de commande.


6. Memprof

Memprof est un outil de profilage et de détection de fuites mémoire du domaine public que l'ont trouve dans les distributions Linux standard. Il peut générer un profil de la quantité de mémoire allouée par chaque fonction du programme. Il peut scanner la mémoire et trouver les blocs qui ont été alloués mais ne sont plus référencés nulle part (code mort).

MemProf fonctionne en préchargeant une bibliothèque pour redéfinir les fonctions d'allocation mémoires des bibliothèques C et ne nécessite pas de recompiler le programme. Un avantage de MemProf sur d'autres outils similaires est d'avoir une jolie interface graphique et d'être relativement facile à utiliser.

Je m'appelle Nikhil Bhargava et je travaille actuellement sur les piles du protocole de communication mobile de troisième génération (3G) chez C-DOT, à Dehli (Inde) depuis un an et demi en tant qu'ingénieur de recherche et de développement (Research Engineer). Mes centres d'intérêt en matière de recherche comprennent les systèmes RTAI (Real Time Application Interface) et les réseaux mobiles (Mobile Networks). Tous commentaires, corrections de bogues et suggestions seront les bienvenus.