Skip to content
Snippets Groups Projects
user avatar
authored

TP3 - Outils de développement


Dans ce TP, premièrement nous faisons une copie du TP2. Deuxièmement, nous allons inspecter le programme pendant son exécution à l'aide du débogueur GDB et faire une analyse mémoire pour détecter les fuites de mémoire et les erreurs de gestion de mémoire avec l'outil Valgrind.

Tables des matières


  1. Prérequis
  2. Travail Préliminaire
  3. Débogage et analyse mémoire
  4. Documentation
  5. Archivage

Prérequis


  • Initialisation du dépôt distant tp3-outils-de-developpement-2-techdev-projet-outillage-unnikrishnanpradheep
  • Donnez l'accès aux proffesseurs référent @.zarella et @benjaminschmitt
  • Clone du dépôt tp2-compilation-techdev-projet-outillage-unnikrishnanpradheep vers un répertoire nommé TP3_SUITE_TP2_CLONE puis copie des données vers le dépôt distant tp3-outils-de-developpement-2-techdev-projet-outillage-unnikrishnanpradheep

Travail Préliminaire


Avant de commencer le débogage et l'analyse de la mémoire du programme, nous allons expliquer le fonctionnement du programme, son but, les arguments attendus et quelques erreurs detectées avant l'utilisation de gdb et Valgrind.

  • Nous possédons un fichier nommé main.c qui contient une structure tableau en plus de cinq fonctions distinctes : alea, remplir, bulle, trier, affiche et main, la fonction principale du programme. Les détails plus approfondis sur chacune des fonctions seront documentés dans le fichier doxyfile.

  • Ce programme est conçu afin de réaliser le tri d'un tableau dynamique par ordre décroissante; le triage peut-être également fait par ordre croissante en changeant une ligne de commande, cette explication sera donné dans le code en commentaire. Le nombre d'élément du tableau et la valeur maximale que peut prendre un nombre sont spécifiées par l'utilisateur. Le remplissage du tableau s'effectue avec des nombres selectionnés aléatoirements à l'aide de la fonction aléa. Les arguments attendus sont le nombre d'élément dans le tableau et la valeur maximale que puisse prendre un nombre respectivement définit par argc et argv. L'éxécution du programme attend trois paramètre l'éxécutable et les deux paramètre argc et argv; dans le cas contraire nous avons un message d'erreur indiquant le nombre de paramètre à fournir.

  • Le nombre maximale d'élément du tableau est donnée par la ligne de code : t.taille = atoi(argv[1]);

  • La valeur maximale d'un nombre est représenté par la ligne suivant : int m = atoi(argv[2]);

  • Détection de certaines erreurs et amélioration à faire avant la procédure du débogage et de l'analyse mémoire.

  1. Nous n'avons par libérer la mémoire allouer à l'aide la fonction free, ce qui peut entraîner uen fuite de mémoire.
  2. Une déclaration double de 'tableau t', cette rebondance sera mis en commentaire.
  3. Faire une gestion d'erreur permettant de savoir si l'allocation mémoire a été bien réussi

Débogage et analyse mémoire


Débogage avec l'outil GDB


  • ajout de l'option -g dans la commande gcc tel que : gcc -g -o main main.c Cette option -g ajoute des informations de débogage au fichier exécutable généré, permettant à l'outil GDB d'accéder à des informaions détaillés sur le code source
  • Lancement de gdb avec : gdb ./main
  • Mettre des breakpoints aux lignes désirées : Exemple : break bulle
  • Pour éxécuter le programme, nous donnons les trois arguments attendu dans run : run main 15 1000

Analyse mémoire avec l'outil Valgrind


  • Analyse mémoire avec Valgrind pour des arguments spécifiques: Valgrind ./main 5 10
  • Le résumé de l'utilisation la mémoire (HEAP SUMMARY) nous indique que nous avons deux allocations mémoires pour un free ce qui entrâine une fuite de mémoire.
  • Premièrement, nous allons initialisé t.tab à NULL par convention, deuxièmement nous créons une gestion d'erreur pour connaitre si l'allocation mémoire de t.tab a été bien faite où dans le cas contraire nous serions informer par un message d'erreur puis pour terminer nous mettons en place la libération de mémoire par free(t.tab)

Documentation


Création et Paramétrage de la documentation

  1. Création d'un fichier Doxyfile : doxygen -g
  2. Configuration du fichier Doxyfile avec les paramètres ci-dessous :
    • PROJECT_NAME = "TP3 - Outils de développement (Code sans_organisation)"
    • PROJECT_NUMBER = 1.0
    • PROJECT_BRIEF = "Trie d'un tableau dynamique 1D (une dimension)"
    • SOURCE_BROWSER = YES
    • INLINE_SOURCES = YES
    • INPUT = ../
  3. Commande permettant de créer deux repertoires 'html' et 'latex' : doxygen Doxyfile
  4. Dans le répertoire 'html', nous pouvons visualiser la documentation via le fichier index.html