User Tools

Site Tools


projtec:gdb

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
projtec:gdb [2017/11/14 11:05] orelprojtec:gdb [2024/03/18 15:06] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Déboguage ======+====== Débogage, etc ======
  
   * GDB : https://moodle1.u-bordeaux.fr/pluginfile.php/268787/mod_resource/content/1/gdb-refcard-v5.pdf   * GDB : https://moodle1.u-bordeaux.fr/pluginfile.php/268787/mod_resource/content/1/gdb-refcard-v5.pdf
   * Valgrind : http://valgrind.org/docs/manual/quick-start.html   * Valgrind : http://valgrind.org/docs/manual/quick-start.html
-  * KCacheGrind +  * KCacheGrind : http://kcachegrind.sourceforge.net/html/Home.html 
 +  * cppcheck (analyse statique de code, linter) : http://cppcheck.sourceforge.net/
   * GCov   * GCov
  
-Voici 4 cas de figures très classiques : 
- 
-  * Votre programme plante à chaque exécution ? Réflexe : relancer le programme avec gdb et/ou valgrind. 
-  * Votre programme boucle à l'infinie à chaque exécution ? Réflexe : lancer le programme avec gdb, puis faire un "break" dans le programme pour voir ou ça boucle puis bt, next, print, watch ... 
-  * Votre programme plante de temps en temps ? Réflexe : autoriser préalablement la génération des fichiers //core// (ulimit -c 100000) et lorsque le programme plante, lancer gdb  sur le fichier //core// généré. 
-  * Votre programme boucle de temps en temps ? Réflexe : lancer gdb et attacher gdb au processus de votre programme. 
  
 ==== Valgrind ==== ==== Valgrind ====
Line 17: Line 12:
 Pour détecter les problèmes d'accès à la mémoire ou les fuites mémoires... Pour détecter les problèmes d'accès à la mémoire ou les fuites mémoires...
  
-  gcc -Wall -g -O0 monprog.c -o monprog +  gcc -Wall -g -O0 monprog.c -o monprog 
-  valgrind --leak-check=yes ./monprog+  valgrind --leak-check=full ./monprog
      
-//A compléter...// 
  
 +==== Analyse statique de code avec cppcheck ====
 +
 +  $ cppcheck --enable=all --xml -I ../include *.c  2> report.xml
 +  $ cppcheck-htmlreport --source-dir=. --report-dir=report --file=report.xml
 +
 +=> Open 'report/index.html' to see the results.
 +
 +Ici un exemple d'intégration dans CMake : https://gitlab-ce.iut.u-bordeaux.fr/PT4/DEMO-GIT-PT4/tree/master/Echecs-c++11
 +
 +==== Utilisation de kcachegrind ====
 +
 +  $ valgrind --tool=callgrind program
 +
 +=> callgrind.out.<pid>
 +
 +  $ kcahegrind callgrind.out.<pid> 
  
 ==== Compilation & Exécution avec GDB ==== ==== Compilation & Exécution avec GDB ====
 +
 +Voici 4 cas de figures très classiques :
 +
 +  * Votre programme plante à chaque exécution ? Réflexe : relancer le programme avec gdb et/ou valgrind.
 +  * Votre programme boucle à l'infinie à chaque exécution ? Réflexe : lancer le programme avec gdb, puis faire un "break" dans le programme pour voir ou ça boucle puis bt, next, print, watch ...
 +  * Votre programme plante de temps en temps ? Réflexe : autoriser préalablement la génération des fichiers //core// (ulimit -c 100000) et lorsque le programme plante, lancer gdb  sur le fichier //core// généré.
 +  * Votre programme boucle de temps en temps ? Réflexe : lancer gdb et attacher gdb au processus de votre programme.
 +
  
 Il est nécessaire au préalable de compiler son code C avec les CFLAGS "-g" et eventuellement "-O0" pour désactiver les optimisations du compilateur. Penser également à compiler avec "-Wall" pour afficher tous les //warnings//. Il est nécessaire au préalable de compiler son code C avec les CFLAGS "-g" et eventuellement "-O0" pour désactiver les optimisations du compilateur. Penser également à compiler avec "-Wall" pour afficher tous les //warnings//.
Line 34: Line 52:
  
   * quit (q) : quitter gdb   * quit (q) : quitter gdb
-  * run , kill (r,k) : lancer l’execution, terminer l'exécution +  * run [<arg1> <arg2> ...], kill (r,k) : lancer l’execution, terminer l'exécution 
-  * break <func>, clear, delete (b,cl,d) : introduire un point darrêt +  * break <func>, break [file:]line : introduire un point d’arrêt 
-  * watch <var> (w), rwatch <var>, awatch <var> : surveiller une variable en écriture, lecture ou les deux...+  * clear, delete <numbp> (b,cl,d) : supprimer un point d'arrêt 
 +  * watch <var> (w), rwatch <var>, awatch <var> : surveiller une variable en écriture, lecture ou les deux... entraîne l'arrêt du programme
   * step, next, continue, finish (s,n,c) : avancer d’un pas (en entrant ou pas dans les sous-fonctions), relancer jusqu’au prochain point d’arrêt, finir la fonction courante   * step, next, continue, finish (s,n,c) : avancer d’un pas (en entrant ou pas dans les sous-fonctions), relancer jusqu’au prochain point d’arrêt, finir la fonction courante
   * print <var> (p) : afficher la valeur d’une variable   * print <var> (p) : afficher la valeur d’une variable
 +  * print *array@len : pour afficher //len// valeurs à partir de l'adresse de basse de //array//
   * list : afficher 10 lignes de code autour de l'instruction courante...   * list : afficher 10 lignes de code autour de l'instruction courante...
   * backtrace / frame <num> : afficher la pile d’execution, changer de frame, ...   * backtrace / frame <num> : afficher la pile d’execution, changer de frame, ...
-  * display <var> / undisplay <numvar> : suivre une variable... +  * display <var> / undisplay <numvar> : suivre une variable et afficher sa valeur quand on fait du pas à pas... 
-  * x <addr> : examiner le contenu de la mémoire à une adresse donnée...+  * x /xw <addr> : examiner le contenu de la mémoire à une adresse donnée dans un format spécifique : /xw affiche un //word// en hexa 
 +  * call foo(1), call strlen("pouet") : appel de fonction 
 +  * set var x = 1 : modification de la variable x 
 +  * shell <cmd> : exécute une commande shell 
 +  * file <program> : pour charger un programme depuis gdb
  
   (gdb) list   (gdb) list
Line 76: Line 100:
   (gdb) attach 12271   (gdb) attach 12271
      
 +==== Autres Trucs ====
 +
 +  * Ctrl-X Ctrl-A : ouvre une petite fenêtre avec le code source paginée, qui suit l'instruction courante...
 +  * Refcard : http://users.ece.utexas.edu/~adnan/gdb-refcard.pdf
 +
 +
projtec/gdb.1510657527.txt.gz · Last modified: 2024/03/18 15:05 (external edit)