Toute personne apprenant la pro­gram­ma­tion finira par tomber sur le terme « débogage ». Ce processus consiste en un examen complet du code source d’un programme in­for­ma­tique visant à détecter les erreurs présentes dans le code. Si vous souhaitez que le logiciel développé fonc­tionne de la façon désirée sur toutes les pla­te­formes et tous les appareils cibles souhaités, l’uti­li­sa­tion d’un débogueur est in­con­tour­nable. Dans l’article suivant, vous dé­cou­vri­rez ce qu’est exac­te­ment un débogueur, comment ces pro­grammes pratiques fonc­tion­nent et dans quels domaines ils sont utilisés.

Qu’est-ce qu’un débogueur ?

Un débogueur, ou debugger, est un programme in­for­ma­tique per­met­tant de détecter et de diag­nos­ti­quer les erreurs dans les logiciels. L’objectif d’un tel outil est de garantir du­ra­ble­ment la fonc­tion­na­lité du logiciel examiné sur l’ensemble des appareils et des pla­te­formes cibles. C’est pourquoi de nombreux dé­bo­gueurs vérifient non seulement le code source, mais aussi l’in­te­rac­tion avec le système d’ex­ploi­ta­tion procédant à l’exécution et le matériel sous-jacent. Le processus de débogage est effectué di­rec­te­ment pendant l’exécution, aussi n’est-il pas né­ces­saire d’arrêter le logiciel examiné pour la vé­ri­fi­ca­tion.

Note

Le terme « débogage » désigne le processus per­met­tant de détecter les erreurs dans un programme. Il est souvent fait appel à ce processus même si aucun débogueur n’est utilisé à cet effet. Dans ce cas, une autre méthode de vé­ri­fi­ca­tion des erreurs est utilisée.

Le terme « débogage » vient du préfixe - et du terme « bogue » (de l’anglais « bug », fr. « insecte »). Dans le dé­ve­lop­pe­ment logiciel, le terme « bug » est utilisé depuis des décennies pour désigner les dif­fé­rents types d’erreurs dans les pro­grammes. Au 19e siècle, ce terme était déjà répandu chez les in­gé­nieurs pour désigner un fonc­tion­ne­ment erroné. Par analogie, on désigne la cor­rec­tion des erreurs d’un logiciel par le terme « bugfix ».

Dé­fi­ni­tion

Les dé­bo­gueurs sont des pro­grammes in­for­ma­tiques assistant les dé­ve­lop­peurs dans la recherche des erreurs des logiciels. Les erreurs détectées lors du débogage, également appelées bugs ou bogues, peuvent être fa­ci­le­ment corrigées ga­ran­tis­sant ainsi un fonc­tion­ne­ment durable du logiciel.

Quelles fonctions assure un débogueur ?

Un logiciel parfait ne com­por­tant aucune erreur n’existe pas. Par con­sé­quent, il est pra­ti­que­ment in­dis­pen­sable de procéder à une op­ti­mi­sa­tion quo­ti­dienne. La plupart du temps, le principal problème n’est pas de dé­ter­mi­ner les processus erronés dans le dé­rou­le­ment du programme mais d’en trouver la cause exacte. Une pa­ren­thèse mal placée ou un opérateur mal utilisé peuvent empêcher qu’un programme fonc­tionne de la façon attendue. Toutefois, au vu des centaines voire des milliers de lignes de code, une recherche manuelle, caractère par caractère, n’ap­por­te­rait que peu de résultats. C’est pourquoi les dé­bo­gueurs modernes indiquent non seulement qu’un problème a été trouvé, mais four­nis­sent aussi des in­for­ma­tions dé­tail­lées sur le type d’erreur et souvent sur la ligne de code dans laquelle l’erreur peut être trouvée.

En général, les dé­bo­gueurs par­cou­rent le code du programme en procédant étape par étape. Des points d’arrêt (angl. « break­points ») sont définis à cette fin dans le logiciel à déboguer. L’outil de débogage identifie ces points et peut les utiliser pour arrêter l’exécution du logiciel à cet endroit. Les dé­ve­lop­peurs ont alors deux pos­si­bi­li­tés :

  • examiner l’état exact du programme à ce moment précis. Les dé­ve­lop­peurs peuvent ainsi vérifier en toute sim­pli­cité si toutes les variables intégrées renvoient les valeurs attendues.
     
  • exécuter le programme à partir du point d’arrêt concerné afin de limiter les éventuels problèmes ou les éven­tuelles sources d’erreurs.

Les points d’arrêt ne doivent pas né­ces­sai­re­ment être fixes : de nombreux debuggers per­met­tent d’associer des con­di­tions in­di­vi­duelles aux points d’arrêt. Le programme peut ainsi être arrêté si certaines con­di­tions se pro­dui­sent. Par exemple, si une boucle réalise 20 cycles cor­rec­te­ment et qu’une erreur se produit uni­que­ment au 21e cycle, le débogueur peut s’attaquer di­rec­te­ment au problème grâce à la condition cor­res­pon­dante. Ceci permet d’éviter de réaliser à nouveau les boucles pré­cé­dentes qui se déroulent sans incident.

Parmi les autres fonc­tion­na­li­tés des dé­bo­gueurs, on trouve notamment l’ins­pec­tion des données – par exemple les contenus des variables – ainsi que l’en­re­gis­tre­ment, le ré­per­to­riage et la mo­di­fi­ca­tion des mémoires, telles que la mémoire prin­ci­pale (mémoire vive) ou le registre du pro­ces­seur.

Comment fonc­tion­nent les debuggers ?

L’uti­li­sa­tion précise d’un débogueur pour vérifier les erreurs dépend d’une part de l’outil utilisé et d’autre part du système d’ex­ploi­ta­tion sur lequel le logiciel et le débogueur sont exécutés. L’uti­li­sa­teur indique à l’outil de vé­ri­fi­ca­tion le processus auquel il doit être lié (un iden­ti­fiant de processus ou un nom). Dans ce dernier cas, le débogueur se renseigne tout d’abord sur l’iden­ti­fiant du processus cor­res­pon­dant. La session de débogage est ensuite initiée via un appel de système.

On distingue gé­né­ra­le­ment deux approches dif­fé­rentes pour l’uti­li­sa­tion des outils de débogage :

  • le processus de vé­ri­fi­ca­tion se déroule à l’intérieur du système sur lequel le logiciel à vérifier est exécuté ;
     
  • le processus de vé­ri­fi­ca­tion n’est pas démarré sur l’or­di­na­teur sur lequel le logiciel à vérifier est exécuté mais depuis un système distant. On appelle ce processus débogage à distance.

Lorsque des mo­di­fi­ca­tions sont apportées au code source d’un logiciel pendant l’exécution, les debuggers modernes sont souvent capables de les intégrer lors de la vé­ri­fi­ca­tion des erreurs. Ce débogage « juste à temps » est par­ti­cu­liè­re­ment in­té­res­sant lors du premier stade de dé­ve­lop­pe­ment d’un logiciel puisque les petites erreurs mais aussi les erreurs im­por­tantes ne sont pas rares à ce moment du dé­ve­lop­pe­ment. Le fait que les en­vi­ron­ne­ments de dé­ve­lop­pe­ment des divers langages de script et des fra­me­works disposent d’un débogueur intégré n’est pas le fruit du hasard.

Dé­bo­gueurs : dans quels cas sont-ils utilisés ?

De façon générale, on constate ce qui suit lorsque l’on s’intéresse aux dé­bo­gueurs ou au débogage : que vous sou­hai­tiez pro­gram­mer, dé­ve­lop­per ou tester un script simple, un processus in­di­vi­duel, un module, un programme complexe ou un système d’ex­ploi­ta­tion complet, l’uti­li­sa­tion de ce procédé de vé­ri­fi­ca­tion pratique est in­dis­pen­sable pour obtenir un code fonc­tion­nant sans provoquer d’erreur sur la durée.

L’uti­li­sa­tion d’un débogueur adapté dans un logiciel présente des avantages pour les dé­ve­lop­peurs mais pas uni­que­ment : conçu et configuré de façon adéquate, cet outil peut par exemple servir d’in­ter­mé­diaire entre l’uti­li­sa­teur du programme et le dé­ve­lop­peur lorsque des erreurs se pro­dui­sent lors de l’uti­li­sa­tion. Les rapports du débogueur per­met­tent en effet aux dé­ve­lop­peurs de mieux saisir où le programme plante et comment l’uti­li­sa­teur peut résoudre le problème avec le logiciel. D’autre part, selon le programme, le débogueur et la gravité de l’erreur, un outil de débogage mis à dis­po­si­tion avec le logiciel peut parfois permettre à l’uti­li­sa­teur de résoudre l’erreur par lui-même.

Aller au menu principal