1 / 17

GDB: Debogueur GNU

Bogue (de châtaigne), terme recommandé par la DGLFLF pour bug (insecte). GDB: Debogueur GNU. Multi-langage Permet l’inspection du source pendant l’exécution Permet le débogage post-mortem. Flags. Compilation normale d’un programme : gcc [flags] <source files> -o <output file>

Download Presentation

GDB: Debogueur GNU

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bogue (de châtaigne), terme recommandé par la DGLFLF pour bug (insecte) GDB: Debogueur GNU Multi-langage Permet l’inspection du source pendant l’exécution Permet le débogage post-mortem

  2. Flags • Compilation normale d’un programme: • gcc [flags] <source files> -o <output file> • Exemple: • gcc -Wall -Werror -ansi prog1.c -o prog1.x • On ajoutel’option –g pour gdb • gcc [other flags] -g <source files> -o <output file> • Exemple • gcc -Wall -Werror -ansi -g prog1.c -o prog1.x • Ne pas demander d’optimisations!

  3. Usage • Juste: “gdb” ou “gdb prog1.x” On obtient une invite: • (gdb) • Si on n’a pas spécifié de programme, on le met ici: • (gdb) file prog1.x • prog1.x est le programme à charger pour exécution, et “file” est la commande pour le charger

  4. À savoir • gdb a un shell: on peutretrouverl’historique des commandes avec les flèches de direction, souvent la touche “tabulation” permet de compléter la commande. • Il y a un help • (gdb) help • (gdb) help [command] • Le programme sous gdb a le même comportement que celui compilé sans –g sauf • Si la bogue vient des optimisations • Si la bogue vient de l’initialisation (oubliée) des variables • Autrement dit, si différence de comportement, chercher de ces côtés là.

  5. Lancer le programme • (gdb) run • Lance le programme • Si le programme n’a pas d’erreur, l’exécution se déroule normalement jusqu’à son terme. • Si il y avait un problème à l’exécutionnormale, le programmeplantemaintenant avec des indications utilessurl’endroit et le contexte: • Program received signal SIGSEGV, Segmentation fault. 0x0000000000400524 in sum array region (arr=0x7fffc902a270, r1=2, c1=5, r2=4, c2=6) atsum-array-region2.c:12

  6. S’il y a une bogue • On veutpouvoir • Arrêter le programme • Mettre des points de surveillance • Sur position • Sur des variables • Exécuter pas par pas • Modifier des variables

  7. Contrôle-C • Arrêter le programme par contrôle-C rend la main « là où le programme est ». • On peut alors exécuter toutes les commandes de gdb • Utile si le programme part en boucle • Attention à ce que l’on peut être au fond d’une fonction système (compilée sans l’option –g): commande finish dans ce cas.

  8. Points d’arrêts (breakpoints) • Utiles pour arrêter le programme pendant son exécution à des endroitsconvenus • Première forme: par fichier/numéro de ligne • (gdb) break file1.c:6 • (gdb) break 6 • Ceci met un point ligne 6, dans file1.c. Si (et seulementsi) le programmepasse par là, ilvas’arrêter et donner la main. On peutomettre le nom du fichiersi pas d’ambiguïté. • On peut mettre autant de points d’arrêt que l’on veut.

  9. Autres formes • On peuts’arrêter à l’invocationd’unefonction. • Si on a la fonction: • intmy_func(int a, char *b); • On peut forcer l’arrêt à chaque appel de my_func • (gdb) break my_func

  10. Lancer et relancer après arrêt (1) • Pour lancer le programme sous gdb, commande run (r) • (gdb) run • Unefoisarrêté, on peutrepartir en émettant la commande continue (c). • (gdb) continue • On peuttoujoursremettre la commande run (repartdepuis le début)

  11. Lancer et relancer après arrêt (2) • Avancerl’exécutiond’uneligne: step (s) • (gdb) step • Avancerl’exécutiond’une instruction: next (n) • (gdb) next • La différence est que next saute par-dessus l’appel des routines, alors que step entre dedans. • On peut s’épargner de la frappe en tapant juste <return>, la commande précédente (next ou step) sera répétée.

  12. Examen des variables • Commande print • (gdb) printmy_var • En hexadécimal • (gdb) print/x my_var • Attention à la visibilité des variables: Gdb s’intéressera à la variable visible là où vous êtes.

  13. Surveillance de variables (watchpoints) • De même que les points d’arrêts agissent quand le programme atteint une position, les points de surveillance agissent quand une variable est modifiée. • (gdb) watchmy_var • Chaque fois que my_var sera modifiée, gdb s’arrêtera et donnera la main, montrant ancienne et nouvelle valeurs. • Attention encoreà la visibilité des variables: il peut y avoir des homonymes. Gdb s’intéressera à la variable visible là où vous posez le watchpoint. De ce fait, il peut être nécessaire de poser un breakpoint juste pour pouvoir poser un watchpoint.

  14. Forcer une variable • On peut forcer la valeur d’une variable • (gdb) set var my_var = val • (gdb) continue • Attention à la visibilité des variables

  15. Autres commandes • where (w) oubacktrace (bt): donne la pile d’appel au moment de l’invocation de la commande. Par exemplequand le programmeestplanté. • finish (f): termine la fonction courante et rend la main. • delete (d): détruit un point d’arrêt. • info breakpoints: donne la liste.

  16. Complications utiles • Souvent le souci n’apparaît que sur une condition particulière qui demande beaucoup de passages par le même breakpoint. • Arrêts conditionnels: • (gdb) break file1.c:6 if i >= ARRAYSIZE • Ici l’arrêt ne se fera que si la condition est vraie. • On peut mettre plusieurs points d’arrêt au même endroit avec des conditions différentes (effet d’un ou logique)

  17. Post-mortem • Le fichier core qui apparaît après un ‘core dump’ peut être utilisé par gdb pour un débogage post-mortem: • gdb core • Les commandes d’examen (qui n’impliquent pas une exécution) peuvent être utilisées: • where • print • Elles donneront l’information demandée au moment du plantage.

More Related