Guillaume Rivière 2010 – 2017

Le logo de la CCI Bayonne Pays Basque

Programmation Procédurale en langage C

TP6 - IDE, Debugger

ATTENTION, ce TP ne demande pas d'écrire beaucoup de code. Mais contrairement aux apparences, ce TP est relativement long, car il exige de la compréhension et demande de nombreux clics. Ne perdez pas de temps !

Écouteurs 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)

English 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

  1. Lancer Eclipse (Menu Démarrer > Tous les programmes > Eclipse CDT)
  2. Si Eclipse demande de spécifier le Workspace (espace de travail) donnez D:\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 bien D:\ECLIPSE_C_WORKSPACE\
  3. Accéder au « Workbench » (En cliquant sur la flèche jaune qui est à droite)
  4. Créer un nouveau projet C (File > New > C Project)
  5. Depuis la fenêtre de dialogue qui s'est ouverte :
    1. Donner un nom au projet : HelloWorld
    2. Décocher l'option intitulée « Show project types and toolchains only if they are supported on the platform »
    3. Dans « Project type » : sélectionner "Executable" > "Empty Project"
    4. Dans « Toolchains » : sélectionner "MinGW GCC"
      Étape 4
    5. Cliquer sur le bouton « Finish »
  6. 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
  7. Écrire le code du programme
  8. Attention : il faut enregistrer votre fichier (File > Save) avant d'essayer de le compiler !
  9. Compiler le projet (Project > Build Project) : lire les messages de compilation qui s'affichent dans un des onglets du bas
  10. 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 D:\ECLIPSE_C\HelloWorld\
Ouvrez une « invite de commandes » Windows et faîtes :

  1. Taper D:
  2. Taper cd ECLIPSE_C
  3. Taper cd HelloWorld
  4. Taper cd Debug
  5. Taper dir et vérifier la présence de HelloWorld.exe
  6. 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, 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

Procédure Visual Studio

Voir la Procédure Visual Studio tout en images

  1. Lancer Visual Studio (Menu Démarrer > Tous les programmes > Microsoft Visual Studio 2013 > Microsoft Visual Studio 2013)
  2. Choisir comme paramètre d'environnement : "Paramètres de développement Visual C++", puis cliquer sur le bouton « Démarrer Visual Studio »
  3. Préparer l'environnement Visual Studio (quand c'est la première fois que le logiciel est lancé)
    1. Ouvrir la fenêtre d'options en faisant : Outils > Options…
    2. Ouvrir la page Éditeur de texte > C/C++ > Général
    3. Cochez Pour l'option « Numéros de ligne »
      options_lignes.png
    4. Ouvrir la page Éditeur de texte > C/C++ > Avancé
    5. Pour l'option « Info express automatique » choisir la valeur " False "
    6. Pour l'option « Désactiver IntelliSense » choisir la valeur " True "
    7. Pour l'option « Désactiver la saisie semi-automatique des #include » choisir la valeur " True "
      options_intellisense.png
    8. Enfin, cliquez sur le bouton « OK »
  4. Créer un nouveau projet (Fichier > Nouveau > Projet…)
  5. Depuis la fenêtre de dialogue qui s'est ouverte :
    1. Sélectionner « Application console Win32 »
    2. Donner un nom au projet : HelloWorld
    3. Donner un emplacement pour le projet : D:\VISUALSTUDIO_WORKSPACE\
    4. Cliquer sur le bouton « OK »
  6. Maintenant, la première fenêtre de l'Assistant d'Application Win32 apparaît. Cliquez sur suivant pour obtenir la deuxième page de l'assistant. Maintenant, cochez l'option « Projet vide » puis cliquez sur le bouton « Terminer »
    Option Projet Vide
  7. Maintenant que le nouveau projet est créé (vérifier qu'il est présent dans l'arborescence à gauche), lui ajouter un nouveau fichier source :
    1. dans l'arborescence de gauche, faire clic droit sur le nom du projet (Un menu doit apparaître)
    2. choisir le sous-menu Ajouter > Nouvel élément… (Une nouvelle fenêtre doit apparaître)
    3. dans la boîte de dialogue, choisir l'option « Fichier C++ (.cpp) », donner le nom hello.c pour le fichier, puis cliquer sur le bouton « Ajouter »
  8. Le fichier hello.c apparaît maintenant dans les « Fichiers sources » de l'arborescence
    hello.c dans Sources
  9. 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) "
    Option TC
    Enfin, cliquez sur le bouton « OK »
  10. Écrire le code du programme
  11. Compiler le projet (Générer > Générer HelloWorld) : lire les messages de compilation qui s'affichent dans un des onglets du bas
  12. 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"); 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

Code 2.1

Compiler le projet. Maintenant, appuyer sur la touche F10 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 »

Observer les variables
Figure 2.1

Déplacez la console Windows en vis-à-vis de la fenêtre Visual Studio.

Maintenant, appuyez encore sur F10. La position dans le code est marquée par une flèche. À un certain moment, le scanf() attendra la saisie d'un nombre, entrez 10, puis retournez sur Visual Studio et continuez de cliquer sur F10 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

Code 3.1

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 :

Ajouter un point d'arrêt
Figure 3.1

Lancer l'exécution du programme en appuyant sur la touche F5. Placez la fenêtre Visual Studio et la console Windows en vis-à-vis, comme ci-dessous :

Fenêtres en vis-à-vis
Figure 3.2

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 » :

Onglet Automatique
Figure 3.3

Appuyer plusieurs fois sur la touche F5 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].

Tableau 3.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 !