Welcome to CS221
Objectifs
Bienvenue à cette première séance de Travaux pratiques. Le but est de:
- Installer et configurer votre environnement intégré QT creator
- Attacher des bibliothèques externes, comme stanford C++.
- Se familiariser les fonctionnalités de debuging.
- Utiliser ces techniques pour fixer des erreurs dans le Tri par bulles.
Installation QT Creator
Votre première tache consiste à installer et configurer QtCrator. C’est un Environnement de développement intégré (IDE) qui vous assiste dans toute les étapes ( écriture, compilation, débogage).
Suivez les instructions dans le guide d’installation en choisissant votre système d’exploitation.
Si vous voulez tester votre configuration:
- Lancer QtCreator.
- Créer un nouveau projet.
- Spécifier
Non Qt project
- Pour la configuration choisissez
cmake
-
Si vous utiliser
git
, vous pouvez le choisir pour gérer les versions de votre programme. - Construire votre programme.
- Lire et comprendre le contenu du fichier de configuration
CMakeLists.txt
Tutorial deboggage
Nous allons utiliser un simple projet utilisant la bibliothèque de Stanford. Ainsi, vous devez télécharger le code de début. Décomprésser le puis ouvrez le fichier NameHash.pro qui contient la configuration du projet.
- Ouvir le project
NameHash.pro
. - Exécuter le projet et saisissez vos informations.
- Maintenant on veut suivre et comprendre l’exécution de de code.
- Chercher la ligne 66 dans le fichier
name_hash.cpp
- Cette ligne contient le code suivant
ch = tolower(ch)
- Ajouter un breakpoint dans cette ligne.
- Lancer maintenant le programme mais avec le mode débogage.
- Chercher la ligne 66 dans le fichier
- Vous remarquez la flèche jaune qui indique l’état actuel de l’exécution.
Apprenez a suivre toujours cette flèche, pour connaitre l’emplacement ou l’état d’exécution de votre programme.
Maintenant, on se concentre sur le panneau en bas. Il s’appelle Pile
d'exécution
.
Ce panneau, vous montre les appels régis par la fonction main.
A partir de ce panneau, on peut remarquer qu’on est dans la fonction nameHash
qui est était appelée dans la fonction main
.
Essayer de cliquer sur la fonction
main
, vous allez observer que vous allez être déplacer automatiquement dans la fonction main.
Très très utile pour suivre les sources d’appels et ainsi découvrir la source d’erreur.
A ce stade on connait où on est dans le programme, La hiérarchie des fonctions appelées. Mais qu’en est il des valeurs des variables?
On peut voir une liste des variables locales ainsi que leur valeur dans le panneau à droite.
Ce panneau vous montre les variables en utilisation, leur types et leurs
valeurs. Par exemple on peut constater qu’on as accès à une variable ch
de
type char et qui possède la valeur B
.
Quel est le type et la valeur de la variable
hashVal
?
Dans la suite on va exécuter le programme étape par étape et voir l’évolution de ces variables an action.
Commençons notre investigation de la boucle for
for (char ch: first + last) {
/* Convert the input character to lower case. The numeric values of
* lower-case letters are always less than 127.
*/
ch = tolower(ch);
hashVal = (kSmallPrime * hashVal + ch) % kLargePrime;
}
Cette boucle va itérer les caractères de mon nom complet. La première
lettre est B
.
Exécutons, maintenant la ligne tolower(ch)
qui change une lettre en
minuscule. Pour ce faire on doit maitriser les actions suivantes:
Mettre la sourie sur chaqune pour connaitre leurs noms.
. Step over: Progresser d’une ligne dans le programme. Cliquer sur cette
icone et vous allez observer qu’on vient d’exécuter la ligne tolower(ch)
et
que maintenant la variable ch=b
dans la zone des variables.
Observer la flèche jaune pour identifier votre emplacement.
Passons maintenant à la ligne suivante qui calcule une valeur de hashage
pour
note caractère.
hashVal = (kSmallPrime * hashVal + ch) % kLargePrime;
Exécutons une autre fois le bouton step over
pour voir l’effet de cette ligne.
Une fois encore, on obtient la valeur calculée pour notre caractère b.
Continuer à avancer jusqu’à vous sentez que vous avez bien maitrisé la fonction nameHash.
. Step out: Avancer l’éxécution juste par des simples linges, sera trop
fastidieux, si notre programme se compose d’une longue boucle comme le cas
ici. Pour se faire on peut exécuter le code jusqu’à la fin d’une fonction
par le bouton step out
.
- Cliquer sur ce bouton, puis observer votre espace des variables.
- Vous devez remarquer que toutes les variables locales associées à la
fonction
nameHash
sont disparus.
- Observer la valeur finale du
hashValue
- Identifier l’emplacement de la flèche jaune qui indique notre retour à
la fonction
main
.
Observer aussi, qu’à ce stade on possède aussi la valeur de retour de la fonction
Chose intéressante,car on peut voir l’état de la fonction avant
l’affectation. Exécuter votre final Step over, pour réaliser cette
affection puis observer votre variable hashValue
.
Exercice: Débogage Tri à bulles
Pour tester vos connaissance en débogage télécharger le project:
- Télécharger puis décompresser le fichier
debuging_exo.zip
. - Ouvre le projet avec QtCretaor.
- Exécute votre code ( vous aurez une erreure de mémoire)
- Utiliser vos nouvelles techniques pour identifier ces bugs.