GDB - Programmes de débogage

Mise en route: démarrage et arrêt

  • gcc -g monprogramme.c

    • Compile myprogram.c avec l'option de débogage (-g). Vous obtenez toujours un a.out, mais il contient des informations de débogage qui vous permettent d'utiliser des variables et des noms de fonctions dans GDB, plutôt que des emplacements de mémoire brute (pas amusant).

  • gdb a.out

    • Ouvre GDB avec le fichier a.out, mais n'exécute pas le programme. Vous verrez une invite (gdb) - tous les exemples proviennent de cette invite.

  • r

  • r arg1 arg2

  • r <fichier1

    • Trois façons d'exécuter «a.out», chargé précédemment. Vous pouvez l'exécuter directement (r), passer des arguments (r arg1 arg2) ou alimenter un fichier. Vous définissez généralement des points d'arrêt avant d'exécuter.

  • help

  • h points d'arrêt

    • Répertorie les rubriques d'aide (aide) ou obtient de l'aide sur un sujet spécifique (h points d'arrêt). GDB est bien documenté.

  • q - Quitter GDB

Parcourir le code

La procédure pas à pas vous permet de tracer le chemin de votre programme et de vous concentrer sur le code qui plante ou renvoie une entrée non valide.

  • l

  • l 50

  • ma fonction

    • Liste 10 lignes de code source pour la ligne courante (l), une ligne spécifique (l 50) ou pour une fonction (l mafonction).

  • prochain

    • Exécute le programme jusqu'à la ligne suivante, puis s'arrête. Si la ligne courante est une fonction, elle exécute toute la fonction, puis s'arrête.next est bon pour parcourir rapidement votre code.

  • étape

    • Exécute l'instruction suivante, pas la ligne. Si l'instruction actuelle définit une variable, c'est la même chose quenext. S'il s'agit d'une fonction, elle sautera dans la fonction, exécutera la première instruction, puis s'arrêtera.step est bon pour plonger dans les détails de votre code.

  • terminer

    • Termine l'exécution de la fonction en cours, puis pause (également appelée étape de sortie). Utile si vous êtes accidentellement entré dans une fonction.

Points d'arrêt ou points de surveillance

Les points d'arrêt jouent un rôle important dans le débogage. Ils mettent en pause (interrompent) un programme lorsqu'il atteint un certain point. Vous pouvez examiner et modifier les variables et reprendre l'exécution. Ceci est utile lorsqu'une défaillance d'entrée se produit ou que les entrées doivent être testées.

  • pause 45

  • casser ma fonction

    • Définit un point d'arrêt à la ligne 45 ou à ma fonction. Le programme se mettra en pause lorsqu'il atteindra le point d'arrêt.
  • regarder x == 3

    • Définit un point de surveillance, qui met le programme en pause lorsqu'une condition change (lorsque x == 3 change). Les points de surveillance sont parfaits pour certaines entrées (myPtr! = NULL) sans avoir à interrompre à chaque appel de fonction.

  • continuer

    • Reprend l'exécution après avoir été mis en pause par un point d'arrêt / point de surveillance. Le programme continuera jusqu'à ce qu'il atteigne le prochain point d'arrêt / point de surveillance.

  • supprimer N

    • Supprime le point d'arrêt N (les points d'arrêt sont numérotés lors de leur création).

Définition des variables

L'affichage et la modification des variables au moment de l'exécution sont une partie essentielle du débogage. Essayez de fournir des entrées non valides aux fonctions ou d'exécuter d'autres cas de test pour trouver la cause première des problèmes. En règle générale, vous afficherez / définissez les variables lorsque le programme est en pause.

  • imprimer x

    • Imprime la valeur actuelle de la variable x. Être capable d'utiliser les noms de variables d'origine est la raison pour laquelle l'indicateur (-g) est nécessaire; les programmes compilés régulièrement font supprimer ces informations.

  • définir x = 3

  • définir x = y

    • Définit x sur une valeur définie (3) ou sur une autre variable (y)
  • appeler ma fonction ()

  • appeler mon autre fonction (x)

  • appel strlen (mystring)

    • Appelle les fonctions définies par l'utilisateur ou système. Ceci est extrêmement utile, mais méfiez-vous des appels de fonctions boguées.

  • afficher x

    • Affiche en permanence la valeur de la variable x, qui est affichée après chaque étape ou pause. Utile si vous recherchez constamment une certaine valeur.

  • non affiché x

    • Supprime l'affichage constant d'une variable affichée par la commande d'affichage.

Backtrace et changement de trames

Une pile est une liste des appels de fonction en cours - elle vous montre où vous vous trouvez dans le programme. Un cadre stocke les détails d'un seul appel de fonction, tels que les arguments.

  • bt

    • Backtracesou imprime la pile de fonctions actuelle pour montrer où vous vous trouvez dans le programme en cours. Si main appelle la fonction a (), qui appelle b (), qui appelle c (), le backtrace est

  • c <= current location 
    b 
    a 
    main
  • up

  • vers le bas

    • Passez à l'image suivante vers le haut ou vers le bas dans la pile de fonctions. Si vous êtesc, vous pouvez vous déplacer vers b ou a pour examiner les variables locales.

  • revenir

    • Retourne de la fonction actuelle.

Gestion des signaux

Les signaux sont des messages lancés après certains événements, tels qu'un minuteur ou une erreur. GDB peut faire une pause lorsqu'il rencontre un signal; vous voudrez peut-être les ignorer à la place.

  • handle [signalname] [action]

  • poignée SIGUSR1 nostop

  • poignée SIGUSR1 noprint

  • handle SIGUSR1 ignorer

    • Demandez à GDB d'ignorer un certain signal (SIGUSR1) lorsqu'il se produit. Il existe différents niveaux d'ignorance.