Info 111 - Programmation impérative, Semaine 9: débogage, tests, projet

Vous trouverez ici le matériel pédagogique pour la Semaine 9 qui est consacrée au projet, avec un prélude sur déboggage et tests. Vous pouvez télécharger ce matériel et travailler dessus selon la procédure usuelle. Vous pouvez aussi consulter l'ancien poly de cours qui vous a été distribué en papier.

Planning

Amphi

Jusqu'ici, nous avons écrit des programmes de quelques lignes; vous aller progressivement aborder des programmes de une à plusieurs centaines de lignes. Pour vous y préparer, nous verrons lundi matin en amphi virtuel des éléments de méthodologie et outils de débogage. Nous poursuivrons par une séance de questions-réponses sur le projet, l'examen mi-semestre, etc (salles virtuelles, Foire-Aux-Questions).

TP

Le TP sera un moment privilégié de la semaine où vous pourrez bénéficier de toute l'aide d'un enseignant.

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 TD la semaine prochaine!**

Consignes

Pour tirer le meilleur parti du TP, il est essentiel de l'avoir bien préparé, notamment en ayant travaillé sur le projet bien en amont:

  • 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?

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 7 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 12 décembre, dans moins d'un mois.

TP: débogage, projet

**Le cœur du TP est le projet. Ne passez pas plus de 20 minutes sur les exercices de débogage.**

Préalable:

  • Téléchargez le sujet de TP selon la procédure usuelle.
  • Ouvrir 00index.html avec Jupyter pour lire le sujet.

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.

  1. Compiler le programme calcul.cpp, l’exécuter et observer l’affichage.
  1. 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.
  1. Noter qu'un fichier nommé core a été produit. Selon la configuration de la machine, ce fichier aura éventuellement un nom de la forme core.24234.
  1. Recompiler le programme en ajoutant l'option -g:
    g++ -g calcul.cpp -o calcul
  1. Relancer le programme.
  1. Lancer le déboggueur:
    gdb calcul
  1. Analyser le fichier core avec la commande:
    core core
    À quelle ligne a eu lieu l'erreur?
  1. Afficher la pile d'appel avec la commande suivante:
    where full
  1. Afficher le code avec:
    list
  1. En déduire la cause de l'erreur. Inutile de corriger le programme.
  1. Quitter le déboggueur avec la commande
    quit

Exercice: Analyse post-mortem d'erreur à l'exécution (variante $\clubsuit$)

Il est possible de compiler un programme de sorte que les erreurs d'accès à la mémoire soient mieux détectés 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

  1. Recompiler le programme calcul.cpp en ajoutant l'option -fsanitize=address:
    info-111 g++ -fsanitize=address calcul.cpp -o calcul
  1. Exécuter le programme, et lire le message d'erreur détaillé.

Exercice: Exécution pas-à-pas avec le débogueur $\clubsuit$

Nous allons maintenant analyser le même programme en l'exécutant pas à pas.

Rappel: l'exécution pas-à-pas avec gdb n'est actuellement pas disponible sur JupyterHub. Vous ne pouvez donc faire cet exercice que en salle de TP ou si vous avez installé les logiciels chez vous.
  1. 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).
  1. Utiliser les commandes start, puis step pour exécuter successivement quelques instructions jusqu’à rentrer dans la boucle for.
  1. Essayer la commande print i, puis avancer de quelques instructions. Essayer la commande display i, puis avancer de quelques instructions.
  1. Continuer l’exécution pas à pas jusqu’à rentrer dans la fonction max. Utiliser la commande where full pour visualiser la pile d’appel.
  1. Utiliser la commande continue pour continuer l’exécution jusqu’à la fin.
  1. 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.

Travail sur le projet