Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
gdb [Le 09/11/2010, 12:31] – 82.247.184.29 | gdb [Le 19/03/2018, 11:55] (Version actuelle) – [Résumé des principales commandes] bcag2 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ---- | ||
+ | ====== Débuggage avec gdb ====== | ||
+ | |||
+ | ===== Description ===== | ||
+ | gdb, acronyme de GNU DeBugger, est un programme qui, comme son nom l' | ||
+ | |||
+ | Cet outil, indispensable à tout programmeur, | ||
+ | |||
+ | |||
+ | ===== Installation ===== | ||
+ | [[: | ||
+ | |||
+ | Si vous développez en utilisant une bibliothèque particulière, | ||
+ | |||
+ | ===== Utilisation basique ===== | ||
+ | |||
+ | ==== Compilation du programme pour le débuggage ==== | ||
+ | Pour que gdb puisse débugger un programme, il a besoin des informations de débuggage, qui peuvent être ajoutées en ajoutant l' | ||
+ | |||
+ | Exemple : | ||
+ | < | ||
+ | |||
+ | ==== Lancement de gdb ==== | ||
+ | Un fois le programme compilé, invoquez gdb comme ceci : | ||
+ | |||
+ | < | ||
+ | <note tip>on peut lancer avec l' | ||
+ | < | ||
+ | qui permet de visualiser le code, les points d' | ||
+ | </ | ||
+ | Dans l' | ||
+ | À tout moment, vous pouvez interrompre le programme avec le raccourci clavier **Ctrl+C** dans le terminal. La commande **where** vous permettra alors de voir la pile des appels. | ||
+ | Pour reprendre l' | ||
+ | |||
+ | Si vous souhaitez changer l' | ||
+ | |||
+ | La commande **start** lance le programme et s' | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Résumé des principales commandes ==== | ||
+ | |||
+ | ^commande | ||
+ | |run | r | lance le programme (s' | ||
+ | |continue | ||
+ | |~~~ | ~~~ | ~~~ | | ||
+ | |break | ||
+ | |info breakpoints | ||
+ | |delete [x] | d [x] | efface les points d' | ||
+ | |~~~ | ~~~ | ||
+ | |next | n | exécute une instruction (ne rentre pas dans les fonctions) | ||
+ | |step | s | exécute une instruction (rentre potentiellement dans les fonctions) | | ||
+ | |finish | ||
+ | |list | l | affiche 10 lignes de code centrée sur la ligne à exécuter | ||
+ | |until xx | u xx | exécute les instructions jusqu' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Utilisation avancée ===== | ||
+ | |||
+ | ==== Placer des points d' | ||
+ | |||
+ | Si vous soupçonnez une fonction particulière de faire bugger votre programme, vous pouvez placer un // | ||
+ | |||
+ | Si la fonction désirée est située dans une classe ou un // | ||
+ | |||
+ | Pour afficher la liste des points d' | ||
+ | < | ||
+ | Num Type Disp Enb Address | ||
+ | 1 | ||
+ | at src/ | ||
+ | Ici, il a pour identifiant 1. S'il ne vous intéresse plus, vous pouvez le supprimer avec la commande **delete 1**. | ||
+ | |||
+ | <note tip>Plus généralement, | ||
+ | |||
+ | Pour aller au prochain point d' | ||
+ | |||
+ | ==== Afficher la valeur d'une variable ==== | ||
+ | |||
+ | Il est possible d' | ||
+ | ou encore, en abbrégé et en spécifiant un type (x:hexa, d:decimal, f:float, c:char, s:string… help x pour les voir tous): | ||
+ | < | ||
+ | La même remarque (§ précédent) sur la portée, concernant les classes et les espaces de nom s' | ||
+ | et pour une variable qui est un tableau de char de 16 caractères: | ||
+ | < | ||
+ | |||
+ | ===== Interfaces graphiques ===== | ||
+ | |||
+ | Il existe de multiples interfaces graphiques pour gdb qui facilitent grandement le débuggage en affichant le code source, créant des schémas représentant les variables, etc. En voici quelques-unes : | ||
+ | |||
+ | * Nemiver: interface de gdb s' | ||
+ | * [[http:// | ||
+ | * ddd: interface graphique très complète pour de nombreux debuggers dont gdb | ||
+ | * xxgdb: interface de gdb pour X | ||
+ | * [[https:// | ||
+ | * gdb-mode pour emacs | ||
+ | |||
+ | ==== Pour Vim/GVim ==== | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== Pour IDE ==== | ||
+ | Aussi, quelques environnements de développement incluent une interface graphique pour **gdb** ; c'est le cas d' | ||
+ | |||
+ | ===== Concurrents ===== | ||
+ | |||
+ | Enfin signalons le concurrent **idb** (d' | ||
+ | < | ||
+ | |||
+ | ===== Liens ===== | ||
+ | * (en) [[http:// | ||
+ | * (fr) [[http:// | ||
+ | * (fr) [[https:// | ||
+ | * (fr) [[https:// | ||
+ | * (fr) [[http:// | ||
+ | * (fr) [[http:// | ||
+ | * (en) [[http:// | ||
+ | * (en) [[http:// |