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
Last revisionBoth sides next revision
projtec:gdb [2018/03/01 15:12] – [Attacher GDB à un processus] orelprojtec:gdb [2020/11/17 16:45] – [Déboguage, etc] orel
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 35: Line 53:
   * quit (q) : quitter gdb   * quit (q) : quitter gdb
   * run [<arg1> <arg2> ...], 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
Line 42: Line 61:
   * 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 /xw <addr> : examiner le contenu de la mémoire à une adresse donnée dans un format spécifique : /xw affiche un //word// en hexa   * 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   * call foo(1), call strlen("pouet") : appel de fonction
   * set var x = 1 : modification de la variable x   * 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 79: 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.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1