Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
gdb [Le 28/11/2010, 08:26] – ancienne révision restaurée 96.21.214.87gdb [Le 24/01/2026, 19:37] (Version actuelle) – suppr anjuta abandonné krodelabestiole
Ligne 1: Ligne 1:
 {{tag>compilation programmation}} {{tag>compilation programmation}}
----- 
  
 ====== Débuggage avec gdb ====== ====== Débuggage avec gdb ======
Ligne 11: Ligne 10:
  
 ===== 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**).
Ligne 27: Ligne 26:
  
 <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.
Ligne 36: Ligne 38:
 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
  
  
Ligne 78: Ligne 83:
 ==== 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 =====
Ligne 85: Ligne 95:
  
    * 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 =====
Ligne 99: Ligne 115:
  
 ===== 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]]