Comment utilisez-vous gdb?

J’ai décidé de découvrir comment nos praticiens C / C + * nix utilisent le débogueur gdb.

Voici ce que j’utilise généralement:

  1. b – séparez nomfichier.c: ligne #, fonction, nomfichier.cpp: fonction, nomClasse :: Membre
  2. n, c, s – prochaine étape continue
  3. nom du programme gdb => définir les points d’arrêt ==> exécuter [liste de parameters] (je le fais pour définir des points d’arrêt avant le démarrage du programme)
  4. l – pour lister le code source environnant.
  5. attachez processID 6 break [emplacement]
  6. gdb programName corefile.core (pour examiner la cause du blocage de l’application)
  7. Je définis aussi parfois des points d’arrêt à la fonction exit (break exit) pour examiner les stacks de programmes
  8. info b pour examiner tous les points d’arrêt
  9. effacer [liste des points d’arrêt]

Comment l’utilisez-vous?

Les commandes gdb les plus utiles à mon avis (à part toutes celles déjà listées):

  • fils d’ information – informations sur les fils
  • fil N – passer au fil N
  • catch throw – break sur toute exception levée. Utile quand vous avez attrapé le bogue seulement après que la stack ait été déroulée.
  • printf , print – examine toutes les expressions, printf accepte les spécificateurs de formatage de style C

Enfin, si le débogage s’effectue via un lien lent, l’interface utilisateur texte peut être utile. Pour l’utiliser, démarrez gdb avec le commutateur de ligne de commande --tui .

Outre ce qui a déjà été posté, j’utilise aussi:

  • un fichier .gdbinit pour les conteneurs STL
  • signal SIGNAL noprint nostop pour certains signaux personnalisés qui ne présentent aucun intérêt réel lors du débogage
  • C-Casts pour déréférencer les pointeurs
  • points d’accroche (attrapé, attrapé)
  • condition pour les points de contrôle et de pause conditionnels
  • rarement gdbserver pour le débogage distant
  • programme gedb coredump , pour ceux qui se gênent par segfaults;)

PS: Une des raisons pour laquelle j’aime personnellement gdb btw. est qu’il prend en charge la complétion par des tabulations pour presque tout (commandes gdb, symboles dans la table des symboles, fonctions, fonctions membres, etc.). Ceci est un assez bon coup de pouce de productivité à mon avis.

L’écriture de scripts est une fonctionnalité intéressante de GDB.

  1. Tout d’abord, vous définissez un point d’arrêt, comme: b someFunction \ n.
  2. Ensuite, vous exécutez la commande: commandes \ n. GDB demandera des commandes pour ce point d’arrêt.
  3. Le scénario courant consiste à imprimer une valeur, puis à continuer. Vous devez donc entrer: p someVar \ n continue \ n.
  4. Pour terminer le script, appuyez sur: Ctrl-D

Après avoir exécuté le programme, votre script sera exécuté à l’occasion lorsque le point d’arrêt se produit.

Gdb n’est pas ma spécialité, mais voici ce que j’utilise:

  • bt lister une stack
  • up , down dans une stack
  • until continuer jusqu’à atteindre une ligne avec un nombre supérieur au courant – pour les boucles existantes
  • watch [expr] casser le programme quand expr change

… mais principalement j’utilise ddd comme interface pour gdb

Tapez Ctrl-X Ctrl-A pour ouvrir une fenêtre simple avec un aperçu de la source.

Il y a quelque temps, j’ai trouvé cgdb:

http://cgdb.sourceforge.net/

C’est une interface pour gdb à base de curses (console de couleur) qui a rendu ma vie beaucoup plus heureuse lorsque j’étais limité au débogage dans une fenêtre de console.

Consultez le guide de l’utilisateur à l’ adresse http://sources.redhat.com/gdb/current/onlinedocs/gdb_toc.html .

Il existe également quelques utilisations qui ne sont pas directement liées au débogage. Par exemple, il peut être utilisé pour l’évaluation de l’expression C:

 (gdb) printf "% lu \ n", (long non signé) (- 3L)
 4294967293

gdb -tui commutateur gdb -tui pour une excellente ‘interface utilisateur texte’ (une sorte de gui en mode texte). Il supporte plusieurs fenêtres et est généralement beaucoup plus convivial que d’utiliser la commande ‘list’ (puisqu’il montre la source dans une fenêtre sep)

Les débutants utilisant gdb auront le sentiment que c’est difficile. Mais il existe un outil basé sur l’interface graphique, DDD (Data Display Debugger), identique à gdb. Vous avez une console dans le bas pour exécuter les commandes gdb et 3 / 4ème partie supérieure serait le code. Vous aurez la possibilité d’apprendre et de comprendre les commandes et le stream de manière excellente.