Semaine 9: débogage, tests, projet¶
Vous trouverez ici le matériel pédagogique pour la Semaine 9, dont l’objectif premier est de lancer votre travail sur le projet. Jusqu’ici, vous avez écrit des programmes de quelques lignes; avec le projet, vous allez progressivement aborder des programmes de une à plusieurs centaines de lignes. Aussi, pour vous y préparer, nous verrons en amphi des éléments de méthodologie et des outils de débogage.
Consignes¶
Vous n’aurez pas de trop des quelques semaines à venir pour le projet; lancez vous à fond dès maintenant. Pour être fier de vos réalisations à venir. Pour de belles soutenances la semaine du 6 décembre. Et aussi parce que le projet est le moment où vous allez consolider et donner du sens à tout ce que nous avons vu depuis le début du semestre. Incidemment, c’est la meilleure préparation à l’examen du 13 décembre, dans moins d’un mois.
Les TPs seront des moments privilégiés des semaines à venir où vous pourrez bénéficier de toute l’aide d’un enseignant. Pour en tirer le meilleur parti, il est essentiel de l’avoir bien préparé, notamment en ayant travaillé sur le projet bien en amont; pour cette semaine:
Choix d’un binôme
Téléchargement et consultation du sujet (voir instructions sur la page web ci-dessus)
Début du travail en autonomie (quelques heures!)
Préparation des questions à l’attention de votre enseignant: quels sont les points à clarifier? les problèmes bloquants?
Cours¶
Cours: Debogage et tests
TD¶
Vous n’aurez pas de TD cette semaine; c’est autant de temps de libéré pour vous consacrer au projet.
Il y aura un dernier TD la semaine prochaine!
TP: débogage, projet¶
Préalable:
Téléchargez le sujet de TP selon la procédure usuelle.
Le cœur du TP est le projet. Ne passez pas plus de 20 minutes sur les exercices de débogage.
Exercice: Analyse post-mortem d’erreur à l’exécution¶
Le but de cet exercice est de prendre en main l’utilisation du débogueur, afin de pouvoir l’utiliser seul par la suite, lorsque vous rencontrerez des problèmes avec vos programmes du projet.
Compiler le programme
calcul.cpp
, l’exécuter et observer l’affichage.L’exécution s’est terminée avec une erreur. Ouvrir le fichier
calcul.cpp
; constater que l’instruction du programme ligne \(21\) n’a pas été exécutée. On sait donc que l’erreur s’est produite avant cette ligne, mais on ne sait pas où exactement elle s’est produite, ni dans quelles circonstances. Nous allons mettre maintenant en application deux techniques vues en cours pour analyser l’état du programme au moment de l’erreur.Noter qu’un fichier nommé
core
a été produit. Selon la configuration de la machine, ce fichier aura éventuellement un nom de la formecore.24234
.Recompiler le programme en ajoutant l’option
-g
:g++ -g calcul.cpp -o calcul
Relancer le programme.
Lancer le déboggueur:
gdb calcul
Analyser le fichier
core
avec la commande ci-dessous (en remplaçant si besoin le 2e core par le nom complet du nouveau fichiercore
produit):core core
À quelle ligne a eu lieu l’erreur?
Afficher la pile d’appel avec la commande suivante:
where full
Afficher le code avec:
list
En déduire la cause de l’erreur. Inutile de corriger le programme (on vous demande juste d’avoir trouvé l’erreur grâce au débogueur).
Quitter le débogueur avec la commande
```
quit
```
Exercice: Analyse post-mortem d’erreur à l’exécution (variante ♣)¶
Il est possible de compiler un programme de sorte que les erreurs d’accès à la mémoire soient mieux détectées et que la pile d’appel soit affichée directement en cas de plantage (comme avec Python) sans avoir à utiliser le déboggueur. Le programme consomme cependant un peu plus de ressources.
Détails: https://en.wikipedia.org/wiki/AddressSanitizer
Recompiler le programme
calcul.cpp
en ajoutant l’option-fsanitize=address
:
```
info-111 g++ -fsanitize=address calcul.cpp -o calcul
```
Exécuter le programme, et lire le message d’erreur détaillé.
Exercice: Exécution pas-à-pas avec le débogueur ♣¶
Nous allons maintenant analyser le même programme en l’exécutant pas à pas.
Retrouver le mode d’emploi de
gdb
dans les notes du cours. Une fois le débogueur lancé, consultez les questions suivantes du TP pour savoir quelles commandes du débogueur utiliser. Il est recommandé d’avoir sous les yeux à la fois l’énoncé de TP (pour savoir quelles commandes on vous demande d’utiliser) et le mode d’emploi (qui indique à quoi correspondent ces commandes).Utiliser les commandes
start
, puisstep
pour exécuter successivement quelques instructions jusqu’à rentrer dans la bouclefor
.Essayer la commande
print i
, puis avancer de quelques instructions. Essayer la commandedisplay i
, puis avancer de quelques instructions.Continuer l’exécution pas à pas jusqu’à rentrer dans la fonction
max
. Utiliser la commandewhere full
pour visualiser la pile d’appel.Utiliser la commande
continue
pour continuer l’exécution jusqu’à la fin.L’exécution se termine avec une erreur. Cette fois la ligne au moment de l’erreur est affichée. Utiliser les commandes vues plus haut pour consulter les valeurs des variables et retrouver ce qui a déclenché l’erreur.