| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| gdb [Le 28/11/2010, 08:26] – ancienne révision restaurée 96.21.214.87 | gdb [Le 24/01/2026, 19:37] (Version actuelle) – suppr anjuta abandonné krodelabestiole |
|---|
| {{tag>compilation programmation}} | {{tag>compilation programmation}} |
| ---- | |
| |
| ====== Débuggage avec gdb ====== | ====== Débuggage avec gdb ====== |
| |
| ===== Installation ===== | ===== Installation ===== |
| [[:tutoriel:comment_installer_un_paquet|Installez les paquets]] [[apt://build-essential gdb|{{apt.png}}]]. | [[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt>build-essential,gdb]]** |
| |
| Si vous développez en utilisant une bibliothèque particulière, vous pouvez éventuellement installer le paquet de débuggage, dont le nom finit par **-dbg**, en plus du paquet de développement (dont le nom finit par **-dev**). | Si vous développez en utilisant une bibliothèque particulière, vous pouvez éventuellement installer le paquet de débuggage, dont le nom finit par **-dbg**, en plus du paquet de développement (dont le nom finit par **-dev**). |
| |
| <code>gdb toto</code> | <code>gdb toto</code> |
| | <note tip>on peut lancer avec l'option //-tui// |
| | <code>gdb -tui toto</code> |
| | qui permet de visualiser le code, les points d'arrêt… bref plus visuel… mais semble buggé |
| | </note> |
| Dans l'interface de gdb, vous pouvez lancer le programme avec **run** et quitter le débogueur avec **quit**. | Dans l'interface de gdb, vous pouvez lancer le programme avec **run** et quitter le débogueur avec **quit**. |
| À 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. | À 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. |
| La commande **start** lance le programme et s'arrête à la première ligne : la commande "n" permet ensuite de faire du pas-à-pas. | La commande **start** lance le programme et s'arrête à la première ligne : la commande "n" permet ensuite de faire du pas-à-pas. |
| |
| <note>Si le programme a des paramètres d'entrée, il faut les ajouter à la suite de **run** (ou **start**).</note> | <note>Si le programme a des paramètres d'entrée, il faut les ajouter à la suite de **run** (ou **start**) ou le mettre en ligne de commande (attention, taper **gdb --args monprogramme monoption mesoptions**).</note> |
| |
| ==== Résumé des principales commandes ==== | ==== Résumé des principales commandes ==== |
| |
| ^commande ^effet ^ | ^commande ^raccourci ^effet ^ |
| |run | lance le programme (s'arrête au prochain point d'arrêt) | | |run | r | lance le programme (s'arrête au prochain point d'arrêt) | |
| |continue | relance le programme (s'arrête au prochain point d'arrêt) | | |continue | c | relance le programme (s'arrête au prochain point d'arrêt) | |
| |~~~ | ~~~ | | |~~~ | ~~~ | ~~~ | |
| |break yyy.c:xx | place un point d'arrêt à la ligne xx du fichier yyy.c | | |break [yyy.c:]xx | b [yyy.c:]xx | place un point d'arrêt à la ligne xx du fichier yyy.c (si indiqué) | |
| |info breakpoints | liste les points d'arrêts | | |info breakpoints | info breakpoints | liste les points d'arrêts | |
| |delete | efface les points d'arrêts | | |delete [x] | d [x] | efface les points d'arrêts si pas d'argument, ou le point d'arrêt correspondant au n° x | |
| |~~~ | ~~~ | | |~~~ | ~~~ | ~~~ | |
| |next | exécute une instruction (ne rentre pas dans les fonctions) | | |next | n | exécute une instruction (ne rentre pas dans les fonctions) peut-être suivi du nombre de ligne à exécuter | |
| |step | exécute une instruction (rentre potentiellement dans les fonctions) | | |step | s | exécute une instruction (rentre potentiellement dans les fonctions) | |
| |finish | exécute les instructions jusqu'à la sortie de la fonction | | |finish | f | exécute les instructions jusqu'à la sortie de la fonction | |
| |until xx | exécute les instructions jusqu'à la ligne xx | | |list | l | affiche 10 lignes de code centrée sur la ligne à exécuter | |
| | |until xx | u xx | exécute les instructions jusqu'à la ligne xx |
| | | |
| | | |
| | |monitor reset halt | | reset la target, permet de recommencer l'execution et le debug depuis le debut du code |
| |
| |
| ==== Afficher la valeur d'une variable ==== | ==== Afficher la valeur d'une variable ==== |
| |
| Il est possible d'afficher la valeur d'une variable une fois que le programme a été interrompu, grâce à la commande **print mavariable**. La même remarque concernant les classes et les espaces de nom s'applique ici. | Il est possible d'afficher la valeur d'une variable une fois que le programme a été interrompu, grâce à la commande <code>print ma_variable</code> |
| | 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): |
| | <code>p/f ma_variable_reelle</code> |
| | La même remarque (§ précédent) sur la portée, concernant les classes et les espaces de nom s'applique ici.\\ |
| | et pour une variable qui est un tableau de char de 16 caractères: |
| | <code>p/c ma_char_chaine@16</code> |
| |
| ===== Interfaces graphiques ===== | ===== Interfaces graphiques ===== |
| |
| * Nemiver: interface de gdb s'intégrant bien à Gnome | * Nemiver: interface de gdb s'intégrant bien à Gnome |
| * Kdbg: interface de gdb s'intégrant bien à KDE | * [[http://kdbg.org|Kdbg]]: interface de gdb s'intégrant bien à KDE |
| * ddd: interface graphique très complète pour de nombreux debuggers dont gdb | * ddd: interface graphique très complète pour de nombreux debuggers dont gdb |
| * xxgdb: interface de gdb pour X | * xxgdb: interface de gdb pour X |
| * cgdb: interface de type ncurses | * [[https://github.com/cgdb/cgdb|cgdb]]: interface de type ncurses |
| * gdb-mode pour emacs | * gdb-mode pour emacs |
| |
| Aussi, quelques environnements de développement incluent une interface graphique pour **gdb** ; c'est le cas d'[[:anjuta|Anjuta]], d'[[:eclipse|Eclipse]] ou encore de [[:kdevelop|KDevelop]]. | ==== Pour Vim/GVim ==== |
| | * [[https://github.com/larrupingpig/vimgdb-for-vim7.4|VimGDB]] |
| | * [[https://www.vim.org/scripts/script.php?script_id=4582|Conque GDB]] |
| | * [[https://sourceforge.net/projects/clewn|Clewn]] |
| | |
| | ==== Pour IDE ==== |
| | Aussi, quelques environnements de développement incluent une interface graphique pour **gdb** ; c'est le cas d'[[:Eclipse]] ou de [[:KDevelop]]. |
| |
| ===== Concurrents ===== | ===== Concurrents ===== |
| |
| ===== Liens ===== | ===== Liens ===== |
| * [[http://sourceware.org/gdb/documentation/|La documentation officielle]] | * (en) [[http://sourceware.org/gdb/documentation/|La documentation officielle]] |
| * [[http://www.linux-france.org/article/devl/gdb_howto.html|Un tutorial]] | * (fr) [[http://www.linux-france.org/article/devl/gdb_howto.html|Un tutorial simple sur linux-france.org]] |
| * [[http://www.gnu.org/software/ddd/|Le site de ddd]] | * (fr) [[https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/gdb.html|tuto de Anne Canteaut de l'INRIA, bien documenté]] |
| * [[http://cgdb.sourceforge.net/|Le site de cgdb]] | * (fr) [[https://openclassrooms.com/courses/deboguer-son-programme-avec-gdb|tuto sur openclassrooms, bien documenté]] |
| * [[http://www.linux-france.org/article/devl/gdb.html|Utilisation de gdb-mode]] | * (fr) [[https://devarea.developpez.com/dix-choses-faisables-avec-GDB/|Dix choses qu'on ne peut faire qu'avec GDB]] |
| * [[http://refcards.com/docs/peschr/gdb/gdb-refcard-a4.pdf|Carte de référence]] | * (fr) [[http://www.linux-france.org/article/devl/gdb.html|Utilisation de gdb-mode sous Emacs sur linux-france.org]] |
| * [[http://www-rocq.inria.fr/who/Anne.Canteaut/COURS_C/gdb.html|Autre tuto]] | * (en) [[http://www.gnu.org/software/ddd/|Le site de ddd (interface graphique pour debuggers dont gdb)]] |
| | * (en) [[http://cgdb.sourceforge.net/|Le site de cgdb]] |