TP6 - IDE, Debugger
POUR LA PROCHAINE SÉANCE (Développement Rapide d'Interfaces TP1) : Amenez des écouteurs pour pouvoir suivre un tutoriel vidéo. À noter impérativement dans votre agenda !
Exercice 1 • Utiliser un Environnement de Développement Intégré (IDE)
En anglais IDE = Integrated Development Environment
1.1 Premier programme avec Eclipse
Écrire un programme qui affiche « J'aime le C » et rien d'autre (donc un programme de genre helloworld).
Procédure Eclipse
Voir la Procédure Eclipse tout en images
- Lancer Eclipse (Menu Démarrer > Tous les programmes > Eclipse CDT ou Eclipse CPP)
- Si Eclipse demande de spécifier le Workspace (espace de travail) donnez
C:\PROG1ACI\ECLIPSE_C_WORKSPACE\
Si tel n'est pas le cas, il faudra faire File > Switch Workspace une fois Eclipse ouvert pour s'assurer que votre espace de travail est bienC:\PROG1ACI\ECLIPSE_C_WORKSPACE\
- Accéder au « Workbench » (En cliquant sur la flèche jaune qui est à droite)
- Créer un nouveau projet C (File > New > C Project)
- Depuis la fenêtre de dialogue qui s'est ouverte :
- Maintenant que le nouveau projet est créé (vérifier qu'il est présent dans l'arborescence à gauche), lui ajouter un nouveau fichier source (File > New > Source File) qui s'appellera
main.c
- Écrire le code du programme
- Attention : il faut enregistrer votre fichier (File > Save) avant d'essayer de le compiler !
- Compiler le projet (Project > Build Project) : lire les messages de compilation qui s'affichent dans un des onglets du bas
- Exécuter le projet (Run > Run) : l'exécution est également produite dans un des onglets du bas
1.2 À quoi un IDE sert-il ?
Les fichiers de votre nouveau projet ont été stockés dans C:\PROG1ACI\ECLIPSE_C_WORKSPACE\HelloWorld\
Ouvrez une « invite de commandes » Windows et faîtes :
- Taper
cd ..
- Taper
cd ..
- Taper
cd PROG1ACI
- Taper
cd ECLIPSE_C_WORKSPACE
- Taper
cd HelloWorld
- Taper
cd Debug
- Taper
dir
et vérifier la présence deHelloWorld.exe
- Lancer son exécution
Ainsi travailler avec un IDE est simplement un choix de confort pour le programmeur ("clicodrome"), car le but final reste le même : produire un exécutable !
1.3 Lecture au clavier avec Eclipse
Écrire un programme qui demande d'entrer un nombre entier, et qui affiche ensuite ce nombre
Important : pour que l'exécution, depuis la console Eclipse-CDT ou Eclipse-CPP, d'un programme qui utilise des scanf()
se déroule correctement, les buffers de sortie doivent être ré-initialisés au début de la fonction main()
en copiant les 4 lignes suivantes :
/*** Set stdout and stderr unbuffered */
setvbuf (stdout, NULL, _IONBF, 0) ;
setvbuf (stderr, NULL, _IONBF, 0) ;
/*************************************/
NB : Ces ajouts sont inutiles si l'exécution est lancée depuis l'invite de commande Windows (car c'est alors un cas d'utilisation normal)
1.4 Un programme avec Visual Studio
Écrire un programme qui demande d'entrer deux nombres entiers, et qui affiche ensuite la valeur absolue de la différence entre ces deux nombres
Important : pour que la compilation soit effectuée sans messages d'erreurs avec le compilateur de Visual Studio, la fonction scanf()
doit être remplacée par la fonction scanf_s()
.
Procédure Visual Studio
Voir la Procédure Visual Studio tout en images.
Note : en cas d'environnement C++ indisponible, suivez les instructions d'installation.
- Lancer Visual Studio (Menu Démarrer > Tous les programmes > Microsoft Visual Studio 2019 > Microsoft Visual Studio 2019)
- Si demandé, choisir comme paramètre d'environnement : "Paramètres de développement Visual C++", puis cliquer sur le bouton « Démarrer Visual Studio »
- Préparer l'environnement Visual Studio (quand c'est la première fois que le logiciel est lancé)
- Ouvrir la fenêtre d'options en faisant : Outils > Options…
- Ouvrir la page Éditeur de texte > C/C++ > Général
- Cochez l'option « Numéros de ligne »
- Ouvrir la page Éditeur de texte > C/C++ > Avancé
- Pour l'option « Info express automatique » choisir la valeur " False "
- Pour l'option « Désactiver IntelliSense » choisir la valeur " True "
- Pour l'option « Désactiver la saisie semi-automatique des #include » choisir la valeur " True "
- Enfin, cliquez sur le bouton « OK »
- Créer un nouveau projet (menu Fichier > Nouveau > Projet…)
- Depuis la fenêtre de dialogue qui s'est ouverte :
- Filtrer C++ pour le langage
- Choisir le modèle "Projet vide"
- Cliquer sur le bouton « Suivant »
- Depuis la nouvelle fenêtre de dialogue qui s'est ouverte :
- Donner un nom au projet :
HelloWorld
- Donner un emplacement pour le projet :
C:\PROG1ACI\VISUALSTUDIO_WORKSPACE\
- Donner un nom pour la solution :
TP6
(Rmq : une solution pourra contenir plusieurs projets) - Cliquer sur le bouton « Créer »
- Donner un nom au projet :
- Maintenant que le nouveau projet est créé :
- vérifier qu'il est présent dans l'arborescence de l'explorateur de solutions (à gauche ou à droite de la zone de travail)
- lui ajouter un nouveau fichier source :
- dans l'arborescence, faire clic droit sur les "Fichiers sources" du projet (Un menu contextuel doit apparaître)
- choisir le sous-menu Ajouter > Nouvel élément… (Une nouvelle boîte de dialoque doit apparaître)
- choisissez le modèle "Visual C++"
- choisissez le type « Fichier C++ (.cpp) »
- donnez le nom du fichier, par exemple
hello.c
- cliquez sur le bouton « Ajouter »
- Le fichier
hello.c
apparaît maintenant dans les « Fichiers sources » de l'arborescence - Ouvrir la fenêtre de propriétés en faisant : Projet > Propriétés de HelloWorld…
Ouvrir la page Propriétés de configuration > C/C++ > Avancé
Pour l'option « Compilation sous » choisir la valeur " Compiler comme code C (/TC) "
Enfin, cliquez sur le bouton « OK » - Écrire le code du programme
- Compiler le projet (Générer > Générer HelloWorld) : lire les messages de compilation qui s'affichent dans un des onglets du bas
- Exécuter le projet (Déboguer > Démarrer le débogage) : l'exécution est lancée dans une console Windows. Si jamais cette console se referme avant que vous n'ayez pu voir la fin de l'exécution du programme, ajoutez cette ligne avant la fin du programme :
system("PAUSE");
(penser à inclure stdlib.h) et recompilez le programme en faisant : Générer > Regénérer HelloWorld
Exercice 2 • Exécuter un programme en mode "pas à pas" avec un debugger
En deux mots, un debugger permet d'exécuter un programme ligne par ligne (d'où l'intérêt, entre autres, de ne mettre qu'une instruction par ligne dans un programme) en observant l'évolution de l'état des différentes variables.
Créez un nouveau projet Visual Studio (projet vide) appelé Factorielle auquel vous ajouterez un nouveau fichier main.c
(Pensez également à activer le mode /TC). Faire un copier-coller du code ci-dessous dans le fichier main.c
Compiler le projet. Maintenant, appuyer sur la touche pour lancer l'exécution pas-à-pas. Une zone en bas de la fenêtre permet d'observer le contenu des variables. Cliquez sur l'onglet « Variables locales »
Déplacez la console Windows en vis-à-vis de la fenêtre Visual Studio.
Maintenant, appuyez encore sur . La position dans le code est marquée par une flèche. À un certain moment, le scanf_s()
attendra la saisie d'un nombre, entrez 10
, puis retournez sur Visual Studio et continuez de cliquer sur tout en observant l'évolution du contenu des variables.
Dans ce programme tout se passe bien, mais nous allons voir dans l'exercice suivant comment utiliser ce mécanisme pour « débugger » un programme.
Exercice 3 • Utiliser un debugger
Un debugger permet de trouver, non pas les erreurs de compilation, mais, les erreurs d'exécution d'un programme (et ceci de manière presque conviviale). Pour observer l'état des variables à certains endroits précis du programme il faut ajouter des "points d'arrêt".
Créez un nouveau projet Visual Studio (projet vide) appelé TriTableau auquel vous ajouterez un nouveau fichier main.c
(Pensez également à activer le mode /TC). Faire un copier-coller du code ci-dessous dans le fichier main.c
Ce programme commence par demander 10 valeurs à l'utilisateur pour remplir un tableau de 10 entiers, puis le tableau est trié selon l'algorithme du tri à bulles et enfin il est affiché. Compiler le projet et exécuter le programme. Que constatez-vous ?
Afin de mieux comprendre ce qu'il se passe, ajouter un point d'arrêt sur la ligne « if (T[j] > T[j+1]) {
» (ligne 17) de la fonction tri_a_bulle()
en faisant un clic gauche dans la marge en face de cette ligne, comme ci-dessous :
Lancer l'exécution du programme en appuyant sur la touche . Placez la fenêtre Visual Studio et la console Windows en vis-à-vis, comme ci-dessous :
Commencer par saisir, dans la console Windows, les 10 valeurs demandées par le programme. Une fois cela effectué, le point d'arrêt sera atteint. Vous pouvez alors observer le contenu des variables à ce moment du programme. Attention, cette fois visualisez avec l'onglet « Automatique » :
Appuyer plusieurs fois sur la touche pour relancer l'exécution du programme. Vous pouvez observer l'évolution du contenu des variables. Relevez sur papier les valeurs prises successivement par les variables i, j, T[j]
et T[j+1]
.
i |
0 | 0 | 0 | 0 | … | |||||||||||||||
j |
0 | 1 | 2 | 3 | … | |||||||||||||||
T[j] |
||||||||||||||||||||
T[j+1] |
Qu'observez-vous d'anormal ? Pour quelles valeurs de i
et de j
?
Essayez de corriger le bug, recompilez et testez le programme pour voir !
Quand vous avez terminé, vous pouvez soit :
- Terminer d'avancer le cas d'étude du Robot Traceur ;
- Passer au TP1 de Développement Rapide d'Interface (Module Génie Informatique).