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.
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
- (en) « Ladebug Debugger Manual : Compaq Tru64 UNIX Version 5.1A or higher », sur tru64unix.compaq.com, (consulté le )
- (en) « The Perl Debugger(s) », sur perl.org, (consulté le )
- (en) « HP WDB », sur www2.hp.com, (consulté le )