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...

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.

Une entrée du journal informatique du Mark 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 critiques pour la sécurité ou le fonctionnement d'un système. Il est également important d'éviter les situations où une modification pourrait, à long terme, perturber davantage les utilisateurs que de tolérer le ou les

Le débogage sur les consoles de jeux vidéo s'effectue généralement avec du matériel spécialisé, comme cette unité de débogage Xbox destinée aux développeurs.

Le débogage peut présenter différents degrés de complexité, allant de la simple correction d'erreurs à des tâches longues et fastidieuses de collecte, d'analyse et de planification des mises à jour de données. Les compétences du programmeur en débogage sont un facteur déterminant pour la résolution d'un problème, mais la difficulté du débogage logiciel varie considérablement selon la complexité du système et dépend également, dans une certaine mesure, du ou des langages de programmation utilisés et des outils disponibles, tels que les débogueurs . Les débogueurs sont des logiciels permettant au programmeur de surveiller l' exécution d'un programme, de l'arrêter, de le redémarrer, de définir des points d'arrêt et de modifier des valeurs en mémoire. Le terme « débogueur » peut également désigner la personne qui effectue le débogage.

En général, les langages de programmation de haut niveau , comme Java , facilitent le débogage grâce à des fonctionnalités telles que la gestion des exceptions et la vérification des types, qui permettent d'identifier plus facilement les véritables causes des comportements erratiques. Dans des langages comme le C ou l'assembleur , les bogues peuvent provoquer des problèmes silencieux, comme la corruption de mémoire , et il est souvent difficile de déterminer l'origine du problème. Dans ces cas-là, des outils de débogage de la mémoire peuvent s'avérer nécessaires.

Dans certains cas, les outils logiciels généralistes spécifiques à un langage peuvent s'avérer très utiles. Il s'agit notamment des outils d'analyse statique de code . Ces outils recherchent un ensemble précis de problèmes connus, certains courants, d'autres plus rares, dans le code source, en se concentrant davantage sur la sémantique (par exemple, le flux de données) que sur la syntaxe, contrairement aux compilateurs et aux interpréteurs.

Il existe des outils commerciaux et gratuits pour divers langages ; certains prétendent pouvoir détecter des centaines de problèmes différents. Ces outils peuvent s'avérer extrêmement utiles pour analyser de très grands ensembles de code source, où une exploration exhaustive est impossible. Un exemple typique de problème détecté est le déréférencement d'une variable avant qu'elle ne soit initialisée. Par ailleurs, certains de ces outils effectuent un typage fort alors que le langage ne l'exige pas. Ils sont donc plus efficaces pour repérer les erreurs potentielles dans un code syntaxiquement correct. Cependant, ces outils ont la réputation de générer de faux positifs, du code correct étant parfois signalé comme douteux. L'ancien programme lint d'Unix en est un exemple ancien.

Pour le débogage de matériel électronique (par exemple, de composants informatiques ), de logiciels de bas niveau (par exemple, de BIOS , de pilotes de périphériques ) et de microprogrammes , on utilise souvent, seuls ou conjointement, des instruments tels que des oscilloscopes , des analyseurs logiques ou des émulateurs en circuit (ICE). Un ICE peut effectuer de nombreuses tâches habituellement dévolues aux débogueurs logiciels sur les logiciels de bas niveau et les microprogrammes .

Processus de débogage

Le processus de débogage commence généralement par l'identification des étapes permettant de reproduire le problème. Cette tâche peut s'avérer complexe, notamment en présence de processus parallèles et de bogues de Heisenberg , par exemple. L' environnement utilisateur spécifique et l'historique d'utilisation peuvent également compliquer la reproduction du problème.

Une fois le bogue reproduit, il peut être nécessaire de simplifier les données d'entrée du programme pour faciliter le débogage. Par exemple, un bogue dans le compilateur peut provoquer un plantage lors de l'analyse d'un fichier source volumineux. Cependant, après simplification du cas de test, quelques lignes du fichier source original suffisent généralement à reproduire le plantage. La simplification peut être effectuée manuellement selon une approche de type « diviser pour régner » , où le programmeur supprime progressivement des parties du cas de test initial, puis vérifie si le problème persiste. Lors du débogage dans une interface graphique , le programmeur peut essayer d'omettre certaines interactions utilisateur de la description du problème initial afin de vérifier si les actions restantes suffisent à déclencher le bogue.

Une fois le cas de test suffisamment simplifié, un programmeur peut utiliser un débogueur pour examiner l'état du programme (valeurs des variables et pile d'appels ) et identifier l'origine du 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… 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.
  • ré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.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 :

  • Basé sur une API : vérifie l’existence d’un débogueur à l’aide des informations système.
  • Basé sur les exceptions : vérifier si des exceptions sont gérées.
  • Blocs de processus et de threads : vérifier si les blocs de processus et de threads ont été manipulés.
  • Code modifié : vérifier les modifications de code effectuées par un débogueur gérant les points d’arrêt logiciels.
  • Vérification matérielle et par registres : recherche de points d’arrêt matériels et de registres du processeur
  • Délai et latence : vérifiez le temps nécessaire à l’exécution des instructions
  • Détection et pénalisation du débogueur

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