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
$ 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
$ valgrind --tool=callgrind program
⇒ callgrind.out.<pid>
$ kcahegrind callgrind.out.<pid>
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
(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
ulimit -c 100000 # autoriser la création de fichier core de 100 MB ./monprog segmentation fault! core dumped. gdb ./monprog core (gdb)
./monprog ps # on voit le pid 12271 gdb -p 12271
ou
gdb monprog 12271
ou
gdb monprog (gdb) attach 12271