Table of Contents

Débogage, etc

Valgrind

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
$ valgrind --leak-check=full ./monprog

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

Voici 4 cas de figures très classiques :

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.

gcc -Wall -g -O0 monprog.c -o monprog
gdb ./monprog
(gdb) r

Memento GDB

(gdb) list
(gdb) b numligne
(gdb) b fichier.c:numligne
(gdb) b nomfunction

Pour afficher quelques trucs :

(gdb) bt
(gdb) frame 2
(gdb) info args
(gdb) info locals
(gdb) p x

Utilisation d'un fichier core

ulimit -c 100000  # autoriser la création de fichier core de 100 MB 
./monprog         
segmentation fault! core dumped.
gdb ./monprog core
(gdb)

Attacher GDB à un processus

./monprog
ps            # on voit le pid 12271
gdb -p 12271

ou

gdb monprog 12271

ou

gdb monprog
(gdb) attach 12271

Autres Trucs