Article de reference

Débogage

En ingénierie , le débogage est le processus qui consiste à trouver la cause première , les solutions de contournement et les correctifs possibles pour les bogues . En matière d...

En ingénierie , le débogage est le processus qui consiste à trouver la cause première , les solutions de contournement et les correctifs possibles pour les bogues .

En matière de débogage logiciel , les techniques peuvent inclure le débogage interactif , l'analyse du flux de contrôle , l'analyse des fichiers journaux , la surveillance au niveau de l'application ou du système , les vidages mémoire et le profilage . De nombreux langages de programmation et outils de développement logiciel proposent également des programmes d'aide au débogage, appelés débogueurs.

Étymologie

II, avec un papillon de nuit collé sur la page.

Le terme bug , au sens de défaut, remonte au moins à 1878, lorsque Thomas Edison a décrit les « petits défauts et difficultés » de ses inventions comme des « bugs ».

Une anecdote populaire des années 1940 est attribuée à l'amiral Grace Hopper . Alors qu'elle travaillait sur un ordinateur Mark II à l'université Harvard, ses collègues découvrirent un papillon de nuit coincé dans un relais, ce qui perturbait son fonctionnement. Ils notèrent dans un registre : « Premier cas avéré de bogue découvert ». Bien qu'il s'agisse probablement d'une plaisanterie , confondant les deux sens du mot « bogue » (biologique et défectueux), cette histoire indique que le terme était utilisé dans le domaine informatique à cette époque.

De même, le terme « débogage » était utilisé en aéronautique avant d'entrer dans le domaine informatique . Dans une lettre adressée au Dr Ernest Lawrence de l'Université de Californie à Berkeley, datée du 27 octobre 1944 [ J. Robert Oppenheimer , directeur du projet Manhattan (bombe atomique ) à Los Alamos, emploie ce terme au sujet du recrutement de personnel technique supplémentaire. L' entrée « débogage » du dictionnaire Oxford English Dictionary utilise ce terme en référence aux essais de moteurs d'avion dans un article de 1945 du Journal of the Royal Aeronautical Society. Un article de la revue « Airforce » (juin 1945, p. 50) mentionne le débogage des caméras embarquées.

L'article fondateur de Gill en 1951 est la première discussion approfondie sur les erreurs de programmation, mais il n'utilise pas le terme bug ou débogage .

Dans la bibliothèque numérique de l' ACM , le terme débogage est utilisé pour la première fois dans trois articles des réunions nationales de l'ACM de 1952. Deux des trois utilisent le terme entre guillemets.

En 1963, le débogage était un terme suffisamment courant pour être mentionné en passant sans explication à la page 1 du manuel CTSS .

Portée

Avec la complexification croissante des logiciels et des systèmes électroniques, les techniques de débogage courantes se sont enrichies de nouvelles méthodes pour détecter les anomalies, évaluer leur impact et planifier les correctifs ou les mises à jour complètes. Les termes « anomalie » et « divergence », plus neutres , permettent d'éviter les mots « erreur », « défaut » ou « bogue », qui pourraient sous-entendre que toute erreur , tout défaut ou tout bogue doit être corrigé à tout prix. Une analyse d'impact peut être réalisée afin de déterminer si la correction d'une anomalie (ou d'une divergence ) est rentable pour le système, ou si une nouvelle version planifiée rendrait ces connus (le remède étant alors pire que le mal). Le fait de fonder les décisions sur l'acceptabilité de certaines anomalies permet d'éviter une culture du « zéro défaut », où l'on pourrait être tenté de nier l'existence de problèmes afin d'obtenir un résultat sans défaut . En tenant compte des aspects connexes, tels que l'analyse coûts-avantages, des techniques de débogage plus larges pourront être mises en œuvre pour déterminer la fréquence des anomalies (la fréquence d'apparition des mêmes « bogues ») et ainsi mieux évaluer leur impact sur le système global.

Outils

. Il est également possible d'utiliser le traçage . Dans les cas simples, le traçage consiste en quelques instructions d'affichage qui indiquent les valeurs des variables à des moments précis de l'exécution du programme.

Techniques

  • Le débogage interactif utilise des outils de débogage permettant d'exécuter un programme étape par étape et de l'interrompre pour inspecter ou modifier son état. Les sous-routines ou les appels de fonction peuvent généralement être exécutés à pleine vitesse, puis interrompus au retour à leur appelant, ou exécutés pas à pas, ou encore selon une combinaison de ces options. Des points d'arrêt peuvent être définis pour permettre l'exécution à pleine vitesse du code non suspecté d'être défectueux, puis l'arrêt à un point d'erreur. Placer un point d'arrêt immédiatement après la fin d'une boucle est une méthode pratique pour analyser du code répétitif. Des points de surveillance sont couramment disponibles : l'exécution peut se poursuivre jusqu'à la modification d'une variable particulière. Des points d'interruption (ou points de capture) permettent d'interrompre le débogueur lors de certains événements, tels que des exceptions ou le chargement d'une bibliothèque partagée.
  • Le débogage par affichage , ou traçage, consiste à observer (en direct ou en différé) les instructions de traçage, ou instructions d'affichage, qui indiquent le déroulement de l'exécution d'un processus et la progression des données. Le traçage peut être effectué à l'aide d'outils spécialisés (comme la fonction de traçage de GDB) ou par insertion d'instructions de traçage dans le code source. Cette dernière méthode est parfois appelée…Le débogage avec la fonction printf, utiliséeen C, était possible grâce à la commandeTRONdans les premières versions duBASIC. TRON signifiait « Trace On » et permettait d'afficher le numéro de ligne de chaque commande BASIC pendant l'exécution du programme.
  • Le traçage d'activité est similaire au traçage (décrit ci-dessus), mais au lieu de suivre l'exécution du programme instruction par instruction, il suit l'activité du programme en fonction du temps total passé par le processeur à exécuter des segments de code spécifiques. Ce temps est généralement exprimé en fraction du temps d'exécution du programme consacré au traitement des instructions à des adresses mémoire définies (programmes en code machine) ou à certains modules (programmes compilés ou en langage de haut niveau). Si le programme débogué passe une part anormalement importante de son temps d'exécution dans les zones tracées, cela peut indiquer une mauvaise allocation du temps processeur due à une erreur de logique, ou du moins une allocation inefficace qui gagnerait à être optimisée.
  • Le débogage à distance est le processus permettant de déboguer un programme s'exécutant sur un système différent de celui du débogueur. Pour démarrer un débogage à distance, le débogueur se connecte au système distant via une liaison de communication, telle qu'unréseau local. Le débogueur peut alors contrôler l'exécution du programme sur le système distant et récupérer des informations sur son état.
  • Le débogage post-mortem consiste à déboguer un programme après son plantage . Les techniques associées incluent souvent diverses méthodes de traçage telles que l'examen des fichiers journaux, l'affichage de la pile d'appels lors du plantage et l'analyse du vidage mémoire (ou fichier core ) du processus ayant planté. Ce vidage peut être obtenu automatiquement par le système (par exemple, lorsque le processus s'est terminé suite à une exception non gérée), par une instruction insérée par le programmeur ou manuellement par l'utilisateur.
  • L'algorithme de la « clôture du loup » : Edward Gauss a décrit cet algorithme simple mais très utile, et désormais célèbre, dans un article de 1982 pour Communications of the ACM, comme suit : « Il y a un loup en Alaska ; ​​comment le trouver ? Commencez par construire une clôture au milieu de l'État, attendez que le loup hurle, puis déterminez de quel côté de la clôture il se trouve. Répétez l'opération uniquement de ce côté, jusqu'à ce que vous puissiez apercevoir le loup. » Cet algorithme est implémenté, par exemple, dans le système de contrôle de version Git par la commande `git bisect` , qui l'utilise pour déterminer quel commit a introduit un bogue particulier.
  • Le débogage par enregistrement et relecture consiste à créer un enregistrement de l'exécution d'un programme (par exemple, à l'aide de l'outil gratuit rr de Mozilla , permettant ainsi un débogage/une exécution réversible), qui peut être relu et débogué de manière interactive. Cette technique est utile pour le débogage à distance et pour la résolution de problèmes intermittents, non déterministes et autres défauts difficiles à reproduire.
  • Le débogage par voyage dans le temps est le processus qui consiste à remonter le temps à travers le code source (par exemple en utilisant Undo LiveRecorder ) pour comprendre ce qui se passe lors de l'exécution d'un programme informatique ; pour permettre aux utilisateurs d'interagir avec le programme ; de modifier l'historique si nécessaire et d'observer comment le programme réagit.
  • Débogage delta une technique d’automatisation de la simplification des cas de test.
  • Saff Squeeze une technique d’isolement de la défaillance au sein de l’essai utilisant l’alignement progressif des parties de l’essai défaillant.
  • Suivi de la causalité : Il existe des techniques permettant de suivre les chaînes de cause à effet dans le calcul. Ces techniques peuvent être adaptées à des bogues spécifiques, tels que les déréférencements de pointeurs nuls.
  • Débogage à l'aveuglette : processus consistant à tenter de corriger un bogue en apportant des modifications du code source largement non dirigées, ce qui peut parfois entraîner d'autres problèmes.
  • Correction automatique des bugs

La correction automatique des bogues consiste à réparer automatiquement les bogues logiciels sans intervention humaine. On parle aussi couramment de génération automatique de correctifs , de réparation automatique des bogues ou de réparation automatique de programmes . L'objectif principal de ces techniques est de générer automatiquement des correctifs adaptés pour éliminer les bogues dans les logiciels sans provoquer de régression logicielle .

Débogage pour systèmes embarqués

Contrairement aux environnements de développement de logiciels généraux, les systèmes embarqués se caractérisent principalement par la multitude de plateformes disponibles pour les développeurs (architectures de processeurs, fournisseurs, systèmes d'exploitation et leurs variantes). Par définition, les systèmes embarqués ne sont pas des logiciels généralistes : ils sont généralement développés pour une tâche unique (ou un petit ensemble de tâches), et la plateforme est choisie spécifiquement pour optimiser cette application. Ce fait complexifie non seulement le travail des développeurs de systèmes embarqués, mais aussi le débogage et les tests, car différents outils de débogage sont nécessaires selon les plateformes.

Malgré le défi de l'hétérogénéité mentionné précédemment, des débogueurs ont été développés, tant commercialement que sous forme de prototypes de recherche. Parmi les solutions commerciales, on peut citer celles de Green Hills Software , Lauterbach GmbH et MPLAB-ICD de Microchip (pour débogueur intégré). Aveksha et Flocklab sont deux exemples de prototypes de recherche . Tous exploitent une fonctionnalité disponible sur les processeurs embarqués à bas coût : un module de débogage sur puce (OCDM), dont les signaux sont accessibles via une interface JTAG standard . Leurs performances sont évaluées en fonction de l'ampleur des modifications applicatives nécessaires et de la fréquence des événements qu'ils peuvent gérer.

Outre la tâche classique d'identification des bogues dans le système, le débogage des systèmes embarqués vise également à recueillir des informations sur les états de fonctionnement du système qui peuvent ensuite être utilisées pour analyser le système : pour trouver des moyens d'améliorer ses performances ou d'optimiser d'autres caractéristiques importantes (par exemple, la consommation d'énergie, la fiabilité, la réponse en temps réel, etc.).

Anti-débogage

L’antidébogage est « la mise en œuvre d’une ou plusieurs techniques au sein du code informatique qui entravent les tentatives de rétro-ingénierie ou de débogage d’un processus cible » . Il est activement utilisé par les éditeurs reconnus dans les schémas de protection contre la copie , mais aussi par les logiciels malveillants pour compliquer leur détection et leur élimination . Les techniques utilisées en antidébogage comprennent :

Un exemple précoce de protection contre le débogage existait dans les premières versions de Microsoft Word qui, si un débogueur était détecté, affichaient le message : « L’arbre du mal porte des fruits amers. Destruction du disque du programme. », après quoi le lecteur de disquettes émettait des bruits alarmants afin de dissuader l’utilisateur de réessayer.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index