Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.



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

Environnements et Outils de Développement Cours 1 Introduction

Débogage de code* Mardi 13 décembre Romaric DAVID Université de Strasbourg - Direction Informatique Pôle HPC. hpc.unistra.

Conventions d écriture et outils de mise au point

Plan global Outils de développement et compilation. Ce que l on veut éviter. Plan. Git : gestion de code source et versionnement.

Introduction aux Machines Virtuelles avec VMKit

Formation à Linux Embarqué. Jérôme Pouiller

Optimisation de logiciels de modélisation sur centre de calcul

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

UE Programmation Impérative Licence 2ème Année

ERESI : une plate-forme d'analyse binaire au niveau noyau. The ERESI team

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

I00 Éléments d architecture

Quatrième partie IV. Test. Test 15 février / 71

Projet de développement

Algorithmique et Programmation, IMA

Eclipse atelier Java

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

IFT Systèmes d exploitation - TP n 1-20%

Exécutif temps réel Pierre-Yves Duval (cppm)

Programmation impérative

OPTIMISER SON PROCESSUS DE TEST AVEC UNE APPROCHE BOITE GRISE

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Réalisation d un OS 32 bits pour PC(x86)

Programmation système I Les entrées/sorties

SonarQube : une autre vision de votre logiciel

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

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

Livrer chaque jour ce qui est prêt! Points clés du développement d un produit avec une livrasion par jour.

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

1 Mesure de la performance d un système temps réel : la gigue

BASE. Vous avez alors accès à un ensemble de fonctionnalités explicitées ci-dessous :

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

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

Installation et prise en main

Bases Java - Eclipse / Netbeans

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

Chapitre 1 Windows Server

Cours A7 : Temps Réel

Les attaques par corruption de mémoire Synopsis Mickael Deloison 22/10/2008

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Java - la plateforme

Guide d installation

Machine virtuelle Java pour Palm TX

Intégrateur de l ERP Proginov 25 chefs de projet et 32 développeurs dédiés aux clients Proginov

TP3 : Manipulation et implantation de systèmes de fichiers 1

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Machines Virtuelles. et bazard autour. Rémi Forax

Surveiller et contrôler vos applications à travers le Web

STAGE IREM 0- Premiers pas en Python

Plan global. Programmation système II. Socket du domaine UNIX. Plan. Socket UNIX, Terminaux, Async IO, Mémoire, ELF.

PHP. Performances. Audit et optimisation LAMP. Julien Pauli. Cyril Pierre de Geyer. Guillaume Plessis. Préface d Armel Fauveau

Compilation (INF 564)

Thème 3 Conception et vérification d architectures de systèmes sur puce

L essentiel. Coopérative, flexible, très performante : la plateforme Engineering Base. web aucotec.com

Le moteur de workflow JBPM

JOnAS Day 5.1. Outils de développements

Analyse de sécurité de logiciels système par typage statique

Architectures d implémentation de Click&DECiDE NSI

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Leçon 1 : Les principaux composants d un ordinateur

PLATE-FORME DE CLOUD COMPUTING SLAPOS. Intégration d applications

Catalogue Formation «Vanilla»

Les failles Format String

Programmer en JAVA. par Tama

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Contributions à l expérimentation sur les systèmes distribués de grande taille

Gestion hybride de la mémoire dynamique dans les systèmes Java temps-réel

TP3 Intégration de pratiques agiles. 1. User Stories (1) Scénario d intégration agile. En direct-live du château

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Xen. Quelques notes autour de Xen

Tutoriel code::blocks

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

Présentation Alfresco

Structure fonctionnelle d un SGBD

as Architecture des Systèmes d Information

Compte Rendu d intégration d application

Introduction au langage C

Les bibliothèques et les centres de documentation de l'enseignement tertiaire

VMWare Infrastructure 3

Les 10 pratiques pour adopter une démarche DevOps efficace

Catalogue des stages Ercom 2013

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Génération de code binaire pour application multimedia : une approche au vol

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

IV- Comment fonctionne un ordinateur?

TP1. Outils Java Eléments de correction

Temps Réel. Jérôme Pouiller Septembre 2011

Le Projet BINSEC. Automatiser l analyse de sécurité au niveau binaire. Airbus group, CEA, IRISA, LORIA, Uni. Joseph Fourier. p.

PG208, Projet n 3 : Serveur HTTP évolué

Quelques éléments de compilation en C et makefiles

Le langage C. Séance n 4

Rappels d architecture

Outils pour les réseaux de neurones et contenu du CD-Rom

Vérifier la qualité de vos applications logicielle de manière continue

Temps forts départementaux. Le calcul au cycle 2 Technique opératoire La soustraction

Transcription:

global Outils de développement et compilation IDE, GCC/Clang, ASAN, perf, valgrind, GDB Timothée Ravier LIFO, INSA-CVL, LIPN 1 re année cycle ingénieur STI 2013 2014 1 / 36 Objectifs des outils présentés Trouver le maximum de bugs : avant même d avoir compilé le projet ; lors de la compilation ; lors de l exécutions des tests. Comprendre pourquoi les bugs restant se produisent. 2 / 36 3 / 36

Environnement de développement intégré vim + pulgins / emacs + plugins ; KDevelop, QtCreator ; Eclipse, NetBeans, IntelliJ IDEA ; Anjuta, Code : :Blocks, eric... Voir la liste et comparaison sur Wikipedia [1]. 4 / 36 5 / 36 Exploiter les options du compilateur $ gcc -Wall -Wextra ; $ clang -Wall -Wextra ; Choisir judicieusement le niveau d optimisation en fonction de l usage : -O2 ou -O3 pour le code final ; -Og pour le débug (avec -g) ;... 6 / 36 7 / 36

Débuggage avec GDB Débuggage avec GDB Permets d observer et de manipuler le comportement d un programme lors de son exécution ; Exécution instruction par instruction ou fonction par fonction ; Mise en place de point d arrêt avec ou sans conditions ; Affichage des variables de la pile et du tas ; Manipulation de la pile d exécution ; Étude d un core dump ; Manipulation des pointeurs, structures... Outil en ligne de commande avec intégration dans la plupart des IDE (sinon il y a KDbg) ; Possible futur remplacement : LLDB du projet LLVM. À surveiller! 8 / 36 9 / 36 GDB : exemple $ gdb monprog [core_dump] (gdb) breakpoint mafonctionavecbug (gdb) run... (gdb) backtrace (gdb) print p (gdb) info locals 10 / 36 11 / 36

Clang Coverity Analyseur statique (sans exécution) intégré au compilateur ; Penser à activer le plus possible d options à la compilation pour lever de potentielles erreurs ; Utiliser les dernières version pour profiter des améliorations de l analyseur même si le code du projet ne sera pas nécessairement compilé avec le dernier compilateur à la fin ; Utiliser plusieurs compilateurs. Outils d analyse statique en ligne ; Gratuit pour les projets open source sinon payant ; Analyse le code d un projet et y cherche des erreurs potentielles ; Étude récente sur les résultats obtenus avec Coverity [2]. 12 / 36 13 / 36 Collection d outils Machine virtuelle qui utilise la compilation à la volée (Just in time ou JIT) ; Aucune instruction du programme originel n est exécutée directement sur le processeur ; Permet de trouver de nombreux types de bugs suivant l outil utilisé ; Avantage : ne nécessite pas de recompilation d un programme ; Désavantage : très lent. 14 / 36 15 / 36

Memcheck Autre outils Utilisation de zone mémoire non-initialisées ; Lecture/écriture dans une zone mémoire après qu elle ai été libérée (use after free) ; Lecture/écriture en dehors d une zone mémoire allouée par malloc ; Fuite de mémoire ;... Massif : étude de l usage (profiling) du tas. Voir l interface Massif Visualizer ; Helgrind et DRD : détecte les situations de compétition (race conditions) dans les programmes multithreadés ; Cachegrind : étude de l usage des caches. Voir l interface KCacheGrind ; Callgrind : analyseur de graphe d appel de fonctions. Voir l interface KCacheGrind ; 16 / 36 17 / 36 Autres outils (expérimental) exp-sgcheck : détecter les erreurs de dépassement de tableaux pour les variables globales et sur la pile qui ne peuvent pas être trouvés par Memcheck. Attention aux faux positifs ; exp-dhat : analyse dynamique de l usage du tas ; exp-bbv : simulateur de performance d un programme qui extrapole un résultat à partir d un ensemble de mesures. 18 / 36 19 / 36

AddressSanitizer : a fast memory error detector Avantages & inconvénients Outil de détection d erreurs liées à l usage de la mémoire en C/C++ ; Il peut détecter : Use after free (dangling pointer dereference) ; Heap buffer overflow ; Stack buffer overflow ; Global buffer overflow ; Use after return ; Initialization order bugs. Disponible avec GCC et Clang. Avantages : Beaucoup plus rapide que Valgrind (memcheck). Désavantages : Recompilation du programme à étudier nécessaire ; Le code est légèrement modifié, on n exécute pas exactement le même code que sans ASan. Il faut donc passer les tests deux fois au minimum. 20 / 36 21 / 36 perf Outils d analyse des performances ; Analyse statistique du système complet (espace utilisateur et noyau) ; Supporte les compteurs de performance matériel, les points de traçage les compteurs de performance logiciels, les sondes dynamiques (kprobes et uprobes)... Ne pas oublier de compiler son programme et ses bibliothèques avec les symboles de débug. Avantage : impact limité sur les performances. 22 / 36 23 / 36

perf : commandes perf : commandes stat : mesure l ensemble des évènements produits par un programme ou le système entier sur une durée donnée ; top : vue similaire à l outil top des fonctions les plus consommatrices en temps d exécution ; record : mesure et enregistre des échantillons de résultats pour un programme précis ; report : analyse un fichier de résultats généré par perf record. Possibilité de générer des graphe d appel de fonctions. annotate : lis les données enregistrées perf record et annote le code source d un programme ; sched : informations sur l ordonnanceur et la latence ; list : liste les évènements supportés sur un système. 24 / 36 25 / 36 Intégration continue (Continuous Integration) 26 / 36 Maintient d un dépôt central pour le projet ; Tous les développeurs travaillent avec cette version du projet et intègrent leur changements régulièrement ; Automatisation des étapes de la construction du projet ; Automatisation des tests du projet et lancement automatique à la suite de chaque construction ; (Optionnel mais vivement recommandé) Tous les commits sont validés avant d être intégrés ; Parmi ces validations, il faut que le projet soit construit et testé pour chaque nouveau commit avant leur inclusion dans la branche principale ; 27 / 36

Intégration continue (Continuous Integration) Avantages La construction du projet doit rester une étape rapide pour garder le cycle modification / construction / test / debug le plus court possible ; Si possible, les tests doivent être fait dans un environnement reproduisant ce qui est utilisé en production ; Il doit être facile de récupérer la dernière version construite du projet (mise à dispositions d archives ou de paquets «nightly») ; Tout le monde à accès aux résultat des dernières construction du projet ; Le déploiement en production doit être automatisé (inclue les procédures de sauvegarde de l environnement). 28 / 36 Les bugs et les erreurs rencontrées à l exécution des tests sont rapportées avant l inclusion définitive du code dans la branche principale du projet ; Les développeurs détectent et fixent les bugs continuellement et le plus tôt possible, ce qui facilite significativement le travail puisque le code est frais ; Évite le syndrome du commit du vendredi soir qui casse un projet ; Test immédiat de tous les changements ; Disponibilité permanente d une version construite du projet pour les tests, les démos ou même la mise en production ; 29 / 36 Avantages Désavantages Retour rapide sur la qualité du code et son fonctionnement et l impact des changements effectués ; Encourage l évolution progressive et continue d un projet ; Permets de mesurer l évolution du projet en terme de qualité du code. Temps de mise en place significatif nécessaire (sauf si l on loue ce service à une autre entreprise) ; Les tests ne sont efficaces que si ils couvrent bien l ensemble du projet et sont maintenus à jour. 30 / 36 31 / 36

Exemples Gerrit + Jenkins ; Github + Travis CI ;... 32 / 36 33 / 36 Doxygen Comment produire du bon code? Générateur de documentation sous divers format ; S appuie à la fois sur le code et sur des commentaires spéciaux qui seront interprétés par Doxygen ; Encourage la documentation du code simultanément à son écriture ; Peut aussi générer des graphes d appel de fonctions. https://xkcd.com/844/ 34 / 36 35 / 36

Références I 1 Comparison of integrated development environments : http://en.wikipedia.org/wiki/comparison_of_integrated _development_environments 2 Étude sur les erreurs trouvées par Coverity : http://www.zdnet.com/coverity-finds-open-source- software-quality-better-than-proprietary-code- 7000028514/ 36 / 36