AccueilđŸ‡«đŸ‡·Chercher

DĂ©bogueur

Un dĂ©beugueur (de l'anglais debugger) ou dĂ©bogueur (de la francisation « bogue ») est un logiciel qui aide un dĂ©veloppeur Ă  analyser les bugs d'un programme. Pour cela, il permet d'exĂ©cuter le programme pas-Ă -pas — c'est-Ă -dire le plus souvent ligne par ligne —, d'afficher la valeur des variables Ă  tout moment et de mettre en place des points d'arrĂȘt sur des conditions ou sur des lignes du programme.

DĂ©bogueur

Description de l'image Winpdb-1.3.6.png.
Informations
Type Type de logiciel (en)

Il s'agit de l'application Ă  la programmation informatique du processus de troubleshooting.

Utilisation

Le programme Ă  dĂ©boguer est exĂ©cutĂ© Ă  travers le dĂ©bogueur et s'exĂ©cute normalement. Le dĂ©bogueur offre alors au programmeur la possibilitĂ© d'observer et de contrĂŽler l'exĂ©cution du programme, en lui permettant par divers moyens de l'observer, de la stopper (mettre en pause l'exĂ©cution du programme) et de la changer. Par exemple, la pile d’exĂ©cution et le contenu des variables en mĂ©moire peuvent ĂȘtre observĂ©s, et la valeur des variables peut ĂȘtre changĂ©e pour altĂ©rer le flot de contrĂŽle du programme afin, par exemple, de dĂ©terminer la cause d'une dĂ©faillance.

Quand l'exécution d'un programme est stoppée, le débogueur affiche la position courante d'exécution dans le code source original pour le débogage formel (en) et le débogage au niveau source. Le débogueur de bas niveau ou de niveau machine montre la ligne désassemblée.

De nombreux dĂ©bogueurs permettent, en plus de l'observation de l'Ă©tat des registres processeurs et de la mĂ©moire, de les modifier avant de rendre la main au programme dĂ©boguĂ©. Ils peuvent alors ĂȘtre utilisĂ©s pour localiser certaines protections logicielles et les dĂ©sactiver, amenant Ă  la conception d'un crack. Ainsi, certains logiciels, connaissant le fonctionnement des dĂ©bogueurs et voulant empĂȘcher de telles modifications, mettent en place des techniques antidĂ©bogage (anti debugging tricks).

Techniques

Les outils offerts par les débogueurs dépendent essentiellement du langage de programmation (utilisé pour développer le programme à déboguer) pour lequel il a été conçu. Néanmoins, la grande majorité des débogueurs offrent des outils similaires.

Outils pour stopper (mettre en pause) l'exécution du programme

  • commande d'arrĂȘt manuel : le programmeur peut dĂ©cider Ă  tout moment de stopper l'exĂ©cution
  • point d'arrĂȘt : placĂ© Ă  un endroit spĂ©cifique du programme (gĂ©nĂ©ralement dans le code source), il indique au dĂ©bogueur d'arrĂȘter l'exĂ©cution lorsqu'elle atteindra cet endroit
  • point d'arrĂȘt conditionnĂ© : comme le point d'arrĂȘt, mais avec une condition supplĂ©mentaire (comme le nombre de passages sur ce point d'arrĂȘt par exemple)
  • point d'observation (watch) : permet d'arrĂȘter l'exĂ©cution du programme sur la condition de la modification d'une variable

Outils pour piloter l'exécution du programme

  • pas-Ă -pas : exĂ©cution instruction par instruction
    • pas-Ă -pas sommaire : une instruction est exĂ©cutĂ©e, dans le programme principal, Ă  chaque fois que le programmeur le demande
    • pas-Ă -pas dĂ©taillĂ© : comme le pas-Ă -pas sommaire, sauf que le pas-Ă -pas entre aussi dans les fonctions
    • avec cadencement : Ă  intervalles pĂ©riodiques, une instruction est exĂ©cutĂ©e (cela permet de ralentir l'exĂ©cution du programme afin qu'elle puisse ĂȘtre suivie de prĂšs par l'Ɠil humain)
  • redĂ©marrage de la fonction courante (drop frame) : abandon de l'exĂ©cution actuelle de la fonction courante et dĂ©marrage d'une nouvelle exĂ©cution de la fonction courante
  • retour en arriĂšre : revenir Ă  l'instruction prĂ©cĂ©dente, en retrouvant l'Ă©tat prĂ©cĂ©dent (fonctionnalitĂ© assez rare)

Outils pour observer l'Ă©tat du programme

  • observation d'une variable
  • observation d'une zone mĂ©moire
  • observation d'un registre du microprocesseur
  • observation de la pile d'appel (backtrace)
  • observation du code source avec point d'exĂ©cution actuel
  • observation du code assembleur (sauf langage interprĂ©tĂ©) avec point d'exĂ©cution actuel
  • trace : permet d'observer des informations en diffĂ©rĂ©, sans stopper l'exĂ©cution du programme

En outre, le débogueur permet généralement de modifier l'état du programme, lorsque son exécution est stoppée :

Débug à distance, débug croisé

Le debug croisé, ou débogage croisé, consiste à déboguer un logiciel à distance et souvent pour une architecture cible différente du poste de développement.

DĂ©bogueur Noyau

Le dĂ©bogage d'un Noyau ou d'un pilote d'un systĂšme d'exploitation nĂ©cessite des outils adaptĂ©s Ă  cette tĂąche particuliĂšrement sensible. En particulier, ce dĂ©bogage se fait habituellement Ă  distance par liaison sĂ©rie (mais parfois par Ethernet) car le dĂ©bogueur prenant le contrĂŽle total du noyau, la machine cible devient alors inutilisable (se fige totalement Ă  chaque point d'arrĂȘt).

Voir par exemple le débogueur kgdb intégré au noyau Linux.

DĂ©bogueurs connus

  • adb, Android Debug Bridge ;
  • AntiC ;
  • bashdb, un dĂ©bogueur du Bourne-Again shell indĂ©pendant du projet GNU ;
  • Broadway ;
  • CodeView, un dĂ©bogueur distribuĂ© avec la solution intĂ©grĂ©e Microsoft Visual Studio Debugger ;
  • DAEDALUS ;
  • DBX, un dĂ©bogueur distribuĂ© avec les premiĂšres versions du systĂšme Berkeley Unix ;
  • D.U.M.A Detect Unintended Memory Access - le fork de Electric Fence ;
  • Dynamic debugging tape (DDT), and ODT ;
  • DuxDebugger — Debugger Disassembler for Windows 64-bit ;
  • Electric Fence ;
  • Firebug ;
  • GDB (GNU Debugger), le dĂ©bogueur du projet GNU ; on peut Ă©ventuellement l’associer Ă  gdbserver en dĂ©bug croisĂ© ;
  • CUDA GDB est la version de gdb pour le langage CUDA de programmation GPU ;
  • IDA The Interactive Disassembler ;
  • Le Java Debugger, gĂ©nĂ©ralement appelĂ© JDB ;
  • kgdb, le dĂ©bogueur intĂ©grĂ© au Noyau Linux ;
  • ladebug, un dĂ©bogueur que l’on utilisait sous le systĂšme d’exploitation Tru64 UNIX[1] ;
  • MacsBug ;
  • Mpatrol ;
  • OCamlDebug, le dĂ©bogueur d'Objective Caml ;
  • OllyDbg ;
  • PE Explorer ;
  • Les dĂ©bogueurs Perl[2] ;
  • Prism Parallel Debugger ;
  • Purify ;
  • sdb ;
  • SoftICE ;
  • Syser, un debugger Ring 0 ;
  • SPlint ;
  • TMON ;
  • TotalView ;
  • Turbo Debugger ;
  • Valgrind ;
  • W32DASM ;
  • HP Wildebeest Debugger, appelĂ© aussi HP WDB[3] ;
  • WinDbg ;
  • ODB: Omniscient Debugger, dĂ©bogueur pour Java permettant de dĂ©boguer du code en revenant en arriĂšre ;
  • xdb, un dĂ©bogueur formel utilisĂ© vers la fin des annĂ©es 1990 sous le systĂšme d'exploitation MPE/iX (en) ; ce nom dĂ©signe aussi un dĂ©bogueur Intel des annĂ©es 2000, appelĂ© communĂ©ment le dĂ©bogueur Intel xdb ;

Bibliographie

  • Jonathan B. Rosenberg, How Debuggers Work: Algorithms, Data Structures, and Architecture, John Wiley & Sons, (ISBN 0-471-14966-7)

Notes et références

  1. (en) « Ladebug Debugger Manual : Compaq Tru64 UNIX Version 5.1A or higher », sur tru64unix.compaq.com, (consulté le )
  2. (en) « The Perl Debugger(s) », sur perl.org, (consulté le )
  3. (en) « HP WDB », sur www2.hp.com, (consulté le )
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.