Entraînement au concours ACM-ICPC



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

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

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

Conventions d écriture et outils de mise au point

Programmation système en C/C++

Outils pour la pratique

Entraînement au concours ACM-ICPC

Projet de développement

Environnements et Outils de Développement Cours 1 Introduction

Optimisation de logiciels de modélisation sur centre de calcul

wxwidgets dans un environnement Microsoft Windows

Programmation système I Les entrées/sorties

Introduction au langage C

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

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

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Les clients GNU/Linux

Algorithmique et Programmation, IMA

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

IBM Power Systems - IBM i IBM Rational

Rappels Entrées -Sorties

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

Windows Azure Platform Développez, déployez et administrez pour le Cloud Microsoft

IFT3902 : (Gestion de projet pour le) développement, (et la) maintenance des logiciels

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Manuel de System Monitor

Eclipse atelier Java

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

Chap III : Les tableaux

The Mozilla Art Of War. David Teller. 20 septembre Laboratoire d Informatique Fondamentale d Orléans. La sécurité des extensions.

EXTENSION de Microsoft Dynamics CRM Réf FR 80452

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

Réussir l implémentation de Solid Edge Insight XT avec Digicad

Langage Éric Guérin 5 octobre 2010

Introduction à l algorithmique et à la programmation M1102 CM n 3

Plan du cours. Historique du langage Nouveautés de Java 7

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

Mesurer les performances (CPU) sous Linux

Le langage C. Séance n 4

SQL Server, MySQL, Toad (client MySQL), PowerAMC (modélisation) Proxy SLIS

Unix/Linux I. 1 ere année DUT. Université marne la vallée

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

Exercice sur les Dockers

Traduction des Langages : Le Compilateur Micro Java

Programmation impérative

Bases Java - Eclipse / Netbeans

Résoudre les problèmes PHP, les meilleures (et les pires) techniques

JOnAS Day 5.1. Outils de développements

Cours d algorithmique pour la classe de 2nde

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

Programmation Orientée Objet

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

Cours de C/C++ par la pratique. Hugues Talbot

Cours Informatique Master STEP

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

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

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

Cadastre du bruit SIT-JURA. Connecteur Arcview9.x - MSAccess. Mode d emploi. Appel formulaire. Page 1 sur 15

Programmation stochastique

UE C avancé cours 1: introduction et révisions

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Travailler à l'ensimag avec son matériel personnel

Traitement de données

LISTE D OPTIONS DE LICENCE

Installation d'un serveur sftp avec connexion par login et clé rsa.

TP1. Outils Java Eléments de correction

Exonet : sauvegarde automatisée d une base de données

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours Programmation Système

Structure d un programme

INFO-F-404 : Techniques avancées de systèmes d exploitation

Présentation du PL/SQL

TP1 - Prise en main de l environnement Unix.

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

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

Asterisk QuickRecord. ANTOINE MANSUY IUT DE COLMAR

Installation et prise en main

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Avant-propos Certificats et provisioning profiles

Guide d administration de Microsoft Exchange ActiveSync

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Cours Langage C/C++ Programmation modulaire

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Comment créer des rapports de test professionnels sous LabVIEW? NIDays 2002

< Atelier 1 /> Démarrer une application web

Apprendre Java et C++ avec NetBeans

Séminaire Partenaires Esri France 7-8 juin Paris Les API ArcGIS pour les smartphones

VERSION octobre Remote Access (accès à distance) Manuel d'utilisation

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

Analyse de performance, monitoring

Programmation en langage C

TP1 : Initiation à Java et Eclipse

TD/TP 1 Introduction au SDK d Android

Impression sous Linux

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

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Introduction à la Programmation Parallèle: MPI

E-PROCUREMENT GESTION D UTILISATEURS

L informatique en BCPST

Transcription:

Entraînement au concours ACM-ICPC Débogage et profilage de programmes C++ Page 1 / 12

Avec un IDE (environnement de développement intégré) Eclipse CDT, NetBeans, Visual C++, XCode, KDeveloper... Fonctionnalités assez avancées (débogage, profilage mémoire, etc.) Lourd à installer, parfois lourd à utiliser Difficile à utiliser conjointement avec des éditeurs externes (emacs, vim...) Difficile d utilisation pour des programmes non développés à l intérieur de l IDE On se concentre ici sur ce qu on peut faire sans IDE (ou en complément) La plupart des outils mentionnés sont disponibles principalement sous Linux Page 2 / 12

Traçage Toujours possible de parsemer son programme C++ de cout <<... Utiliser grep pour rapidement repérer l information utile Penser à utiliser le plus intelligemment les deux sorties du programme (cout, cerr) pour pouvoir rediriger les flux d information En Shell Unix : > pour rediriger la sortie standard, 2> pour rediriger la sortie d erreur, pour envoyer la sortie standard dans l entrée d un autre programme (p. ex., less, grep), & pour envoyer les deux sorties dans l entrée d un autre programme Remarque Pour la lecture de l entrée du problème et l écriture des résultats, cin / cout est parfois trop lent, privilégier dans ces cas scanf / printf, voire read / write Page 3 / 12

Les bonnes options de compilation de GCC -W -Wall pour les messages d avertissement, permettant de détecter des bugs évidents (variables non utilisées, retour de fonction manquante, = utilisé dans un if(), etc.) -pedantic pour encore plus de messages d avertissement -g pour inclure les symboles dans l exécutable généré et permettre le débogage -std=c++98 pour vérifier autant que possible la conformité au standard C++ 1998 -std=c++11 pour vérifier autant que possible la conformité au standard C++ 2011 (nécessaire pour utiliser les nouvelles fonctionnalités du langage) -pg pour faire du profilage (voir plus tard) -O2 à ne pas utiliser quand on veut déboguer : fait disparaître certaines variables ou instructions, etc. Page 4 / 12

Example de compilation et exécution Pour tester avec toutes les optimisations : g++ -W -Wall -pedantic -std=c++11 -O2 problem.c &&./a.out < input Le && évite de laisser passer une erreur de compilation Pour déboguer : g++ -W -Wall -pedantic -std=c++11 -g problem.c && gdb./a.out r < input Pour interrompre l exécution n importe où : CTRL+C Page 5 / 12

GDB : utilisation On lance GDB avec gdb./mon_programme Principales commandes : r < input pour démarrer le programme en lisant input sur sa sortie standard r redémarre le programme b nom_fonction pour positionner un point d arrêt clear supprime le point d arrêt en court c continue jusqu au prochain point d arrêt n, s avance d une instruction ; s va à l intérieur des appels de fonction bt, u, d affiche et navigue dans la pile des appels print expr affiche la valeur d une expression watch expr arrêtera le programme quand la valeur de l expression changera q quitte GDB Page 6 / 12

Interfaces graphiques de GDB gdb -tui pour une simili-interface graphique, assez pratique ddd, KDbg, Insight interfaces graphiques plus ou moins complètes Page 7 / 12

Profilage avec gnuprof Permet de savoir dans quelles fonctions le programme passe son temps Compiler avec -pg Exécuter et attendre la fin normale du programme Un fichier gmon.out est créé Exécuter gprof./mon_executable > rapport.txt pour analyser ce fichier Étudier rapport.txt Aussi simplement utiliser time./mon_programme pour mesurer le temps pris par un programme Page 8 / 12

Page 9 / 12 Débogage mémoire Programmes identifiant les fuites mémoires, débordement de pile, accès à de la mémoire non allouée sur le tas... : valgrind est une machine virtuelle exécutant le programme en contrôlant chacun des accès mémoire ; très lent, mais très efficace valgrind./mon_programme Permet souvent de trouver rapidement la source d un problème, à essayer tôt. efence redéfinit les fonctions d allocation mémoire pour détecter les accès incorrects au tas LD_PRELOAD=libefence.so./mon_programme Permettent en général d identifier les bugs au moment où ils apparaissent (mais uniquement pour la mémoire dynamique), contrairement à gdb en cas de corruption mémoire

Dépendances ldd donne la liste des bibliothèques dynamiques référencées par un programme nm -D donne la liste des symboles définis par une bibliothèque dynamique ou un exécutable, ou référencés par un exécutable c++filt est un filtre permettant de déchiffrer les noms de symboles C++ encodés Page 10 / 12

Appels systèmes et appels dynamiques strace Liste les appels systèmes (fonctions du noyau) utilisés par un programme donné ; utile pour voir à quels fichiers on accède ou quelles connexions réseau sont établies ltrace liste les appels de fonctions depuis des bibliothèques dynamiques (y compris des fonctions de la librairie C++) ; attention, seules les fonctions non présentes à l intérieur de l exécutable seront indiquées ; ceci exclut la plupart des classes avec paramètres de modèle (templates) ; utiliser c++filt! Page 11 / 12

Déboguer un programme en cours Suivant la configuration du système, il peut être possible d utiliser gdb, strace, ltrace, sur un programme en cours Simplement ajouter l option «-p pid» en ligne de commande, où pid est l identifiant du processus (p. ex., récupéré avec ps) Parfois réservé à l administrateur du système Page 12 / 12

Contexte public } avec modifications Par le téléchargement ou la consultation de ce document, l utilisateur accepte la licence d utilisation qui y est attachée, telle que détaillée dans les dispositions suivantes, et s engage à la respecter intégralement. La licence confère à l utilisateur un droit d usage sur le document consulté ou téléchargé, totalement ou en partie, dans les conditions définies ci-après et à l exclusion expresse de toute utilisation commerciale. Le droit d usage défini par la licence autorise un usage à destination de tout public qui comprend : le droit de reproduire tout ou partie du document sur support informatique ou papier, le droit de diffuser tout ou partie du document au public sur support papier ou informatique, y compris par la mise à la disposition du public sur un réseau numérique, le droit de modifier la forme ou la présentation du document, le droit d intégrer tout ou partie du document dans un document composite et de le diffuser dans ce nouveau document, à condition que : L auteur soit informé. Les mentions relatives à la source du document et/ou à son auteur doivent être conservées dans leur intégralité. Le droit d usage défini par la licence est personnel et non exclusif. Tout autre usage que ceux prévus par la licence est soumis à autorisation préalable et expresse de l auteur : sitepedago@telecom-paristech.fr Page 13 / 12