Compilateurs, Gestion de projets, deboggeur



Documents pareils
1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Outils pour la pratique

Optimisation de logiciels de modélisation sur centre de calcul

Le langage C. Séance n 4

Utiliser Dev-C++ .1Installation de Dev-C++ Table des matières

Tutoriel code::blocks

L informatique en BCPST

Testez votre installation. Créer un répertoire vide

AVEC LIVE TRADER, VISEZ PLUS HAUT POUR VOS INVESTISSEMENTS

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Introduction à l informatique en BCPST

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Introduction au langage C

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Construction de logiciel et packaging

TP 1 Prise en main de l environnement Unix

Guide de l utilisateur. Faites connaissance avec la nouvelle plateforme interactive de

Initiation. àl algorithmique et à la programmation. en C

Manuel de System Monitor

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Quelques éléments de compilation en C et makefiles

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

TP1 - Prise en main de l environnement Unix.

Introduction à la présentation graphique avec xmgrace

Comment configurer Kubuntu

Conventions d écriture et outils de mise au point

Securexam Consignes pour l EFU Les 2, 3 et 4 juin 2015

Programmation C. Apprendre à développer des programmes simples dans le langage C

Aide - mémoire gnuplot 4.0

Silhouette Studio Leçon N 2

1. Ouvrir Internet Explorer Faire défiler une page Naviguer dans un site Internet Changer d adresse Internet (URL) 2

Tutoriel Création d une source Cydia et compilation des packages sous Linux

Séance 0 : Linux + Octave : le compromis idéal

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

Manuel d utilisation de ndv 4

Algorithmique et Programmation, IMA

On trouvera sur le site du CCDMD un exemple d album construit avec Cantare. (

Eclipse atelier Java

Introduction à Eclipse

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours Langage C/C++ Programmation modulaire

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Studio. HERITIER Emmanuelle PERSYN Elodie. SCHMUTZ Amandine SCHWEITZER Guillaume

Introduction à MATLAB R

FEN FICHE EMPLOIS NUISANCES

USTL - Licence ST-A 1ère année Initiation à la programmation TP 1

TABLE DES MATIÈRES 1. DÉMARRER ISIS 2 2. SAISIE D UN SCHÉMA 3 & ' " ( ) '*+ ", ##) # " -. /0 " 1 2 " 3. SIMULATION 7 " - 4.

Programmation système I Les entrées/sorties

Installation et compilation de gnurbs sous Windows

Organiser le disque dur Dossiers Fichiers

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Sélection du contrôleur

Les structures. Chapitre 3

TP1 : Initiation à Java et Eclipse

Mode d emploi pour lire des livres numériques

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

ET 24 : Modèle de comportement d un système Introduction à Labview et initiation à la réalisation d un Instrument Virtuel (VI).

MODE OPERATOIRE CIEL GESTION COMMERCIALE VERSION EVOLUTION BTS PME PMI

FAIRE SES COMPTES AVEC GRISBI

Avertissement : Nos logiciels évoluent rendant parfois les nouvelles versions incompatibles avec les anciennes.

Guide de l utilisateur Mikogo Version Windows

Démarrer et quitter... 13

GUIDE D UTILISATION DU TABLEAU BLANC INTERACTIF EBEAM EDGE

Bienvenue à l historien virtuel 2.0

L espace de travail de Photoshop

ndv access point : Utilisation

Remise à niveau d un programme JAVA du domaine public

Les outils numériques permettant l enregistrement de documents audiovisuels diffusés sur Internet sont nombreux. Certains sont gratuits.

TP1 : Initiation à Java et Eclipse

Services de banque en ligne de la BADR BADRnet/ GUIDE UTILISATEURS

Niveau 1. Atelier d'initiation à l'ordinateur ... Fondation de la Bibliothèque Memphrémagog inc. Magog (Québec) J1X 2E7 Tél.

Environnements de développement (intégrés)

Atelier Le gestionnaire de fichier

CONNECT Comptabilité - Liste des fonctionnalités TABLE DES MATIERES

Excel 2007 Niveau 3 Page 1

Guide d installation de MySQL

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

Création du projet : 1 sur 13

Guide d utilisation 2012

Projet De Stijl Plate-forme pour robots mobiles

TP1 : Initiation à l algorithmique (1 séance)

LES TOUT PREMIERS PAS

Module.NET 3 Les Assemblys.NET

Créer et partager des fichiers

Tutoriel. Votre site web en 30 minutes

Édu-groupe - Version 4.3

MODE D EMPLOI V.2.0. Installation. Nouveautés V.02. Fais ton journal - version mars Mode d emploi -

Volet de visualisation

Utilisation de la plateforme VIA ecollaboration

Manuel d installation et d utilisation du logiciel GigaRunner

GUIDE Excel (version débutante) Version 2013

Présentation du logiciel

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Découvrez Windows NetMeeting

Vos outils CNED COPIES EN LIGNE GUIDE DE PRISE EN MAIN DU CORRECTEUR. 8 CODA GA WB 01 13

Open-Sankoré. Mise en route. Guide utilisateur Février 2013 NTICE (E. S.)

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Guide de l administrateur DOC-OEMCS8-GA-FR-29/09/05

Tropimed Guide d'installation

Transcription:

Chapitre 4 Compilateurs, Gestion de projets, deboggeur 4.1 Compilateurs 4.1.1 Introduction Une fois le programme écrit (ou récupéré), il est nécessaire de traduire le code en langage machine. Cette tache est dévolue au compilateur présent sur le système. Sur les PC sous Linux (Fedora Core), il existe un compilateur par défaut qui est le compilateur GNU : pour le langage C, ce compilateur s appelle gcc, pour le langage C++, le compilateur s appelle g++, pour le langage fortran 77, le compilateur s appelle g77. Il n existe pas à l heure actuelle de compilateur GNU de fortran 90. Les autres compilateurs ne sont pas des logiciels libres, et il est nécessaire d acheter des produits en général. Il existe toutefois un compilateur gratuit sous plateforme linux qui est le compilateur Intel. Les noms sont les suivants : ifc pour le compilateur Fortran (Fortran 77 et Fortran 95), icc pour le compilateur C, icc pour le compilateur C++. 4.1.2 Options de compilations Les options de compilation permettent de générer un code dont les performances seront plus ou moins bonnes selon les options choisies. Ces options permettent aussi de générer un exécutable qui pourra fonctionner avec un debuggeur, outil qui permet une exécution conditionnelle du programme dans le sens où l on peut interrompre pour un temps indéterminé l exécution d un programme à une phase choisie et que l on peut visualiser l état des variables à chaque instant. Nous reviendrons plus loin dans ce chapitre sur l utilisation d un deboggeur. Nous considérons tout d abord les options qui sont identiques pour les deux compilateurs disponibles Pour permettre d utiliser un déboggeur, il faut utiliser l option de compilation -g. Cette option conduit à un exécutable de taille plus importante et généralement une performance moindre. Le compilateur GNU permet

Compilateurs, Gestion de projets, deboggeur de plus de combiner cette option avec les options d optimisation. Il est à noter que le déboggeur dépend du compilateur, ainsi il faut utiliser le déboggeur Intel avec le compilateur Intel,... Pour accroître les performances à l éxécution, les options d optimisation sont pour les deux compilateurs -O jusqu à -O3. Pour le compilateur Intel, il existe des options de compilation spécifiques selon le type de processeur Intel (Pentium III, Pentium IV,... ) -tpp6 ou -tpp7 et qui permettent en général un léger accroissement des performances. La salle de l école doctorale possédant les deux types de processeurs, ces options ne sont à utiliser que si l on connait à l avance l architecture de la machine sur laquelle le programme sera exécuté. En utilisant l instruction cat /proc/cpuinfo, on peut récupérer l information sur la nature du processeur. Cette option est quand même à utiliser en dernier ressort. Il existe bien entendu un très grand nombre d options de compilations pour chacun des compilateurs et ce très court mémo ne saurait remplacer la lecture des documentations spécifiques. 4.2 Génération d un fichier Makefile La syntaxe d un fichier Makefile est assez rébarbative et il existe sous Linux des outils qui permettent la génération d un Makefile à partir de fichiers dont la syntaxe est plus simple. Je vous propose donc une recette pour créer un fichier Makefile qui s adapte en fonction des architectures et des compilateurs disponibles sur la plateforme sur laquelle le projet est installé. 4.2.1 Mémo pour créer un Makefile avec les outils GNU Avec une distribution Linux standard, on dispose d outils puissants (A condition de savoir les utiliser) pour créer un Makefile très simplement. Placer les fichiers sources dans un répertoire Executer autoscan Un fichier configure.scan a alors été créé. Renommer ce fichier en configure.in et changer les champs FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS, [allocdouble.c], AC OUTPUT. # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT( FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AC_CONFIG_SRCDIR([allocdouble.c])<br> AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CC # Checks for libraries.

4.2 Génération d un fichier Makefile # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([stdlib.h string.h sys/time.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_TIME # Checks for library functions. AC_FUNC_MALLOC AC_CHECK_FUNCS([floor gettimeofday pow sqrt]) AC_OUTPUT \end{program} On a alors un fichier configure.in de la forme suivante \begin{verbatim} # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59)<br>AC_INIT(heisenberg, 0.3, viot@lptl.jussieu.fr) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([stdlib.h string.h sys/time.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_TIME # Checks for library functions. AC_FUNC_MALLOC AC_CHECK_FUNCS([floor gettimeofday pow sqrt]) <strong>ac_output(makefile)</strong> Deux lignes ont été ajoutées. Elles sont importantes. Il faut alors créer un fichier Makefile.am, dont la structure en la suivante : la première ligne définit le nom de l exécutable. La seconde collecte tous les fichiers sources du projet. La troisième précise les arguments à donner pour charger les bibliothèques spécifiques. bin PROGRAMS = heisenberg

Compilateurs, Gestion de projets, deboggeur heisenberg SOURCES = allocdouble.c allocint.c alloclong.c alloclong2.c anint.c correlations.c edwaldset.c energie.c init.c main.c montecarlo.c neighbors.c read data.c write data.c heisenberg LDADD = -lm >Exécuter autoheader Exécuter aclocal (Il peut y avoir beaucoup de Warnings, mais pas d affolement) Exécuter touch NEWS README AUTHORS ChangeLog (pour les courageux, on peut écrire dans ces fichiers des choses utiles pour la description du projet) Exécuter automake Exécuter autoconf Exécuter configure. le fichier Makefile est alors créé! 4.2.2 Options de Configure Par défaut le précédent Makefile est configuré avec gcc et les options -g - O2. On peut surtout ensuite générer des nouveaux Makefile très facilement en plaçant sur la ligne de configure des directives. Voici quelques exemples gcc avec l option -Wall -O3. On exécute configure CFLAGS= -Wall -O3 configure icc avec l option -O3 -ipo. On execute configure CC=icc CFLAGS= -O3 -ipo Dans un programme de simulation, il est très utile de découper le projet en modules, lesquels sont alors stockés sous la forme de fichiers différents. Pour éviter de compiler la totalité du code quand on vient de modifier un seul de ces modules, il est utile de créer un fichier Makefile. Ce fichier est traité sous Unix par l utilitaire make. 4.3 Déboggeur graphique 4.3.1 Introduction Une fois que le programme ne présente plus de fautes syntaxiques, et l éditeur de liens a pu généré un fichier exécutable, on peut commencer à effectuer une première simulation. Pour un programme fraîchement écrit, il est rare que le programme effectue la totalité des calculs sans une sortie inopinée, ou que les résultats obtenus ne soient pas franchement erronés. Commence alors la phase (qui est parfois plus longue que l écriture de la première version) qui consiste à traquer les erreurs conceptuelles du programme, plus connues sous le terme de bug en Anglais, (signifiant cafard). Le moyen ancestral dédié à cette tâche consistait à demander l impression de l état des variables du programme. En effet, dans l immense majorité des cas, en regardant l affichage des résultats intermédiaires d un calcul, cela permet de trouver l origine des fautes de programmations qui ont été introduites dans l écriture du programme. Pour déterminer les erreurs de compilation et la qualité du code, il est très utile de disposer de deux compilateurs. En effet, les messages d erreurs sont

4.3 Déboggeur graphique Fig. 4.1 Fenêtres du déboggeur graphique avec le programme chargé en mémoire parfois plus clairs avec l un des compilateurs et permettent donc une mise au point plus rapide. En compilant et exécutant le code sur chacun des compilateurs, cela permet de vérifier que les résultats obtenus sont identiques. De plus les performances des exécutables étant souvent différentes, on peut choisir le compilateur le plus adapté au programme que l on a à faire travailler. Une fois que le (ou les) compilateur(s) donne(nt) un fichier exécutable, le travail de validation du code ne fait que commencer. Le résultat obtenu par l exécution du programme est parfois erroné, voire pire quand le programme s interrompt. L extrême majorité des cas consiste donc à corriger ses erreurs de programmation et le déboggeur permet de réaliser cela beaucoup plus efficacement qu en essayant de le faire en imprimant des résultats intermédiaires. Un déboggeur en mode texte est quand même rébarbatif, ils s appellent gdb pour le compilateur GNU et idb pour le compilateur Intel. Il y a heureusement des interfaces graphiques pour le compilateur GNU sous Linux qui rendent l utilisation de ce produit beaucoup plus aisé. A nouveau, ces quelques notes ne sont qu une introduction aux très nombreuses fonctionnalités dont disposent ces produits. Cela devrait vous permettre de résoudre l essentiel des problèmes.

Compilateurs, Gestion de projets, deboggeur Fig. 4.2 Fenêtres du déboggeur graphique avec un point d arrêt situé sur la ligne printf 4.4 ddd Il existe deux interfaces (front-end en anglais) pour gdb sous Linux : kdbg et ddd. Nous nous limitons à ddd, mais il est possible et facile de passer à kdbg. Le programme que nous allons utiliser est très simple et ne nécessite pas un déboggeur. Pour des projets plus consistants, le déboggeur devient un élément très utile pour la mise au point du programme. Le programme est le suivant #include <stdio.h> #include <math.h> #include <stdlib.h> int main(){ double x[100]; double sum=0; { unsigned int i; for (i=1;i<100;i++){

4.4 ddd Fig. 4.3 Fenêtres du déboggeur graphique pour visualiser un tableau printf x[i]=cos ((double) i /M_PI); sum+=x[i]; } } printf("somme %10.5e\n",sum); } exit(exit_success); En exécutant ddd simple dans un terminal (ou en allant chercher dans le menu programmation de l environnement graphique kde ou gnome), il apparaît une fenêtre graphique (voir figure 4.1) du déboggeur. On peut noter qu il y a en fait plusieurs sous-fenêtres. Au dessous des menus et icônes, se trouve une première fenêtre (partie avec une grille) destiné à afficher les variables que l on souhaite suivre au cours de l exécution. La partie centrale correspond au code et se trouve aussi une fenêtre avec 16 boutons correspondant aux différentes actions que peut exercer le déboggeur. Cette dernière fenêtre peut être bien entendu déplacée. La partie inférieure est une fenêtre de type console où s affiche les messages liés et dans laquelle on peut exécuter des ordres pour le déboggeur. La fenêtre centrale permet de mettre des points d arrêts, comme cela est montré sur la figure 4.2. Pour mettre ce point, il suffit de placer le curseur de la souris sur la ligne sur laquelle on souhaite interrompre le programme, puis cliquer sur l icône break. Il apparaît alors un bouton signalant l existence de ce

Compilateurs, Gestion de projets, deboggeur Fig. 4.4 Fenêtre du déboggeur graphique pour visualiser un tableau printf point d arrêt (On peut bien évidemment placer plusieurs points d arrêts dans un programme).. Une fois ces opérations effectuées, on appuie sur la touche run, le programme est exécuté jusqu au point d arrêt, et une flèche signale l endroit où le déboggeur s est arrêté. On peut par exemple visualiser graphiquement les valeurs numériques d un tableau. Pour cela, on noircit à la souris le nom du tableau et on clique sur l icône plot. Il apparaît alors une fenêtre graphique ou le tableau est tracé graphiquement. La figure 4.3 montre le déboggeur et la fenêtre graphique qui donne une représentation du tableau x. On peut noter que cette visualisation peut être transformée avec l aide des fonctions de cette fenêtre graphique accessibles par menu déroulant. Le menu plot permet de changer par exemple les points en une ligne continue. En exécutant cette fonction, on peut voir plus clairement que le premier élément du tableau x[0] qui n est pas dans la boucle (car l indice de boucle démarre à 1) donne une discontinuité (voir figure 4.4). Cette absence d initialisation du premier élément est susceptible d être à l origine d un bug, dans un programme plus grand. Les données de cette courbe peuvent être aussi sauvegardés dans un fichier texte utilisable par d autres logiciels d analyse. Ainsi on peut très rapidement déterminer la source d erreurs difficilement détectables avec des outils plus rudimentaires. Quand le programme est arrêté par un point d arrêt, on peut visualiser les variables qui sont encore actives, en plaçant juste le curseur de la souris sur la variable dont on souhaite connaître l état.

4.4 ddd Fig. 4.5 Fenêtres du déboggeur graphique après un pas d exécutions après le pas d arrêt : trois opérations ont été effectuées : impression de sum, visualisation impossible de i en dehors du bloc, et impression du premier élément du tableau x (possible bug dans un programme car l itération commence à 1). Il est souvent insuffisant de faire exécuter une seule fois un programme sous ddd pour trouver toutes les erreurs. On peut bien entendu recommencer en modifiant les points d arrêt. Pour éliminer un point d arrêt, il faut que le programme soit arrêté en dehors du point d arrêt à éliminer. On place alors le curseur sur la ligne du point d arrêt, et avec le point droite de la souris, on fait apparaître un petit menu qui permet de sélectionner l élimination de ce point. Si le programme est stoppé à un point d arrêt que l on souhaite, on peut vérifier avec le bouton droit de la souris que le menu pour désactiver n apparaît pas. Il suffit alors de faire avancer le programme d une instruction en cliquant sur le bouton step du menu flottant. On peut alors tranquillement retirer le point d arrêt. Cette astuce est très utile quand on examine les premières itérations de l intérieur d une boucle. En reprenant l exemple précédent, si on déclare le tableau de manière dynamique, on perd un peu de simplicité pour visualiser ce tableau avec le debuggeur (alors que la syntaxe du coeur du programme est la même) : en effet, si on clique

Compilateurs, Gestion de projets, deboggeur directement sur l icone plot après avoir préalablement surligné avec la souris le nom du tableau, il n apparait pas de fenêtre graphique. Pour visualiser ce tableau, on tape dans la fenêtre du bas du déboggeur la commande suivante : graph plot x[0]@100. Cela signifie que l on veut voir les 100 éléments du tableau à partir de l indice 0. 4.5 Conclusion Au delà du choix du langage de programmation, nous avons vu quelques outils permettant la construction et la mise au point de codes. Les outils présentés rapidement dans le chapitre ne représente une liste exhaustive des outils disponibles sur les stations, mais leur maitrise est sans doute nécessaire avant d aller plus loin et suffisent dans l extrème majorité des cas à la mise au point et la validation des codes utilisés en simulation.