GNU/Linux >> Tutoriels Linux >  >> Linux

Exemple de point d'arrêt GDB pour C - Définir, afficher, continuer et supprimer des points d'arrêt

Gdb est un outil essentiel pour déboguer les programmes C.

Les points d'arrêt sont le moyen de dire à GDB d'arrêter ou de mettre en pause l'exécution du programme à certaines lignes, fonctions ou adresses. Une fois le programme arrêté, vous pouvez examiner et modifier les valeurs des variables, poursuivre l'exécution du programme à partir de ce point d'arrêt, etc.

Si vous débutez avec GDB, vous devez d'abord comprendre les bases du débogage du C programme utilisant GDB.

Ce didacticiel utilisera le code suivant pour décrire le point d'arrêt gdb avec des exemples.


#include <stdio.h>

int power(int,int);

int main() {

        int i;
        printf("Program to calculate power\n");
        for (i=0;i<10;i++)
                printf("%d %d\n",i, power(2,i));
        return 0;
}

int power (int base, int n) {

        int i,p;
        p=1;
        for (i=1; i<=n; i++)
                p = p*base;
        return p;
}

# cc -g power.c

Vous avez maintenant un exécutable qui calcule la puissance de la base 2 de 0 à 9.

1. Comment définir un point d'arrêt à la fonction

# gdb
(gdb) file ./a.out
Reading symbols from /home/lakshmanan/a.out...done.

(gdb) b power
Breakpoint 1 at 0x40055d: file power.c, line 16.

(gdb) run
Starting program: /home/lakshmanan/./a.out 
Program to calculate power

Breakpoint 1, power (base=2, n=0) at power.c:17
17		p=1;

Nous fixons un point d'arrêt à la puissance de la fonction et nous exécutons le programme. Le programme continuera son exécution jusqu'à l'appel de la fonction à power(). Une fois la fonction rencontrée, le programme s'arrêtera.

2. Obtenir les informations sur les arguments passés à une fonction

Pour connaître les arguments passés à la fonction, utilisez "info args".

(gdb) info args
base = 2
n = 0

3. Obtenir les informations sur les variables locales

Pour connaître les informations sur les variables locales accessibles au sein de cette fonction (stack frame courant) utilisez ‘info locals’.

(gdb) info locals
i = 32767
p = -7840

4. Continuer l'exécution du programme jusqu'au prochain point d'arrêt

Pour continuer le programme jusqu'au prochain point d'arrêt, utilisez "continuer".

(gdb) continue 
Continuing.
0 1

Breakpoint 1, power (base=2, n=1) at power.c:16
16		int i=0,p=1;

Une fois que nous avons donné "continuer", la fonction de puissance a été exécutée et a imprimé le résultat. La même fonction d'alimentation a été appelée à nouveau depuis la boucle for 'main()', de sorte que le programme s'est arrêté une fois de plus.

5. Obtenir des informations sur tous les points d'arrêt

Vous pouvez obtenir des informations sur les points d'arrêt à l'aide des "points d'arrêt d'informations".

(gdb) info breakpoints 
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00000000004005a7 in power at power.c:16
	breakpoint already hit 2 times

Maintenant, nous avons défini un seul point d'arrêt et les informations concernant les points d'arrêt sont affichées.

6. Supprimer un point d'arrêt existant

Pour supprimer un point d'arrêt existant, utilisez "supprimer les points d'arrêt"

(gdb) delete breakpoints 1

(gdb) info breakpoints 
No breakpoints or watchpoints.

Nous avons maintenant supprimé le point d'arrêt qui était présent dans la fonction d'alimentation.

7. Définir un point d'arrêt temporaire

Parfois, vous voudrez peut-être arrêter le programme à un moment donné une seule fois. Vous pouvez utiliser des points d'arrêt temporaires pour cela. Un point d'arrêt temporaire n'arrête le programme qu'une seule fois, puis il sera supprimé.


(gdb) tbreak power
Temporary breakpoint 3 at 0x4005a7: file power.c, line 16.

(gdb) info breakpoints 
Num     Type           Disp Enb Address            What
3       breakpoint     del  y   0x00000000004005a7 in power at power.c:16

(gdb) continue 
Continuing.
1 2

Temporary breakpoint 3, power (base=2, n=2) at power.c:16
16		int i=0,p=1;

(gdb) info breakpoints 
No breakpoints or watchpoints.


Linux
  1. Conseil de pro :Boucles For, While et Until

  2. Remappage de la touche d'alimentation à supprimer ?

  3. Comment configurer OpenCL pour les GPU sous Linux et Docker [Guide complet]

  4. Points d'arrêt et points de surveillance GDB à l'aide d'exemples awatch rwatch

  5. Comment configurer les en-têtes et les bibliothèques pour le développement Linux

Définir des fonds d'écran animés et vidéo pour votre bureau Linux

Trouvez et définissez de beaux fonds d'écran pour le bureau Linux avec Fondo

Comment afficher et supprimer l'historique du terminal dans Ubuntu 20.04

Comment configurer des appareils Razer sous Linux pour des effets d'éclairage et d'autres configurations

Configurer des tâches Cron pour Linux et 10 meilleurs outils en ligne pour les tâches Cron

Comment afficher et supprimer les règles Iptables - Lister et vider