You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Francois DELOBEL 9e540d0a2d
Manuel
1 month ago
..
images Rangement TP 1 month ago
liste_chainee Manuel 1 month ago
README.md Rangement TP 1 month ago
liste_chainee.tgz Rangement TP 1 month ago

README.md

Prise en main de l'IDE QtCreator

Ce TP a pour but de vous faire prendre en main l'IDE, découvrir le débogeur, valgrind (memcheck) et s'assurer que tout va bien.

Disclaimer: Pas mal d'IDE intègrent bien Qt, notamment clion. QtCreator présente l'aventage d'être plutôt léger, d'être libre et bien packagé.

Installation de la doc de cppreference dans QtCreator

QtCreator permet de parcourir la documentation de Qt. Nous pouvons aussi ajouter la documentation plus générale du C++ de cppreference.com. Pour ce faire:

  • Barre de menu en haut -> Tools -> Options -> Help -> Documentation (onglet)
  • Clickez sur Add
  • Donnez le chemin /usr/share/cppreference/doc/qch/cppreference-doc-en-cpp.qch

Si vous voulez faire de même sur vos machines debian ou dérivés, il faut ajouter le paquet cppreference-doc-en-qch.

Pimpez votre IDE

  • Faites un tour dans les préférences et customisez à votre goût.
  • Suggestions:
    • Fond sombre
    • Répertoire de build par défaut dans /tmp/
    • Nom des header par défaut en .hpp

Premier projet

  • Créez un nouveau projet :
    • Vous avez le choix entre "Application Qt" (avec et sans graphismes) ou "Application non Qt" (typiquement pour du pur C++).
      • Application Qt en console : pour notre première application. Pas de graphisme, mais le mécanisme de signaux et de slots.
      • Application graphique. Prendre une version QML (Pas de widgets). Sur un Qt récent vous pouvez faire un projet en mode "compatibilité" pour des outils compatibles avec du Qt 5.
    • Pour le moment, on va commencer avec une application non Qt.
    • Pour le système de build, on va prendre du qmake, mieux supporté par la version de votre IDE. cmake est le standard mis en avant depuis la version 6.

Note sur la sélection des kits: Un kit est une association entre un compilateur, un debogueur, une version de Qt, une architecture cible (ex. ARM ou x86), plus un mode de compilation. Les modes de compilations proposés sont:

  • Release : binaire optimisé pour la vitesse d'exécution.
  • Debug : binaire en mode débug, avec les symboles de débogages et les bibliothèques en mode débogage. Beaucoup plus gros, mais permet d'utiliser le débogueur
  • Profile : binaire instrumenté pour utiliser un profiler, un outil qui permet de calculer lors d'une exécutions des statistiques sur les différentes fonctions de votre code (nombre d'appel, temps passé), afin d'identifier les parties à optimiser.
  • Embarqué / optimisé pour la mémoire

Votre machine devrait être configurée pour vous proposer un seul kit, avec les quatres modes de compilation. Laissez au moins debug.

  • Ne prenez pas de gestionnaire de version pour ce premier test. Plus tard, versionnez!

Code du premier projet

  • Faites un "Hello World" (normalement généré tout seul).
  • Vérifier que tout va bien (exécutez, compilez).
  • Regarder la barre d'onglets horizontale inférieure (notamment sortie de l'application et compilation).

Utilisation d'un débogueur

Contexte

L'objet de ce tutorial est de vous familiariser avec l'usage d'un IDE. Nous utiliserons l'IDE léger QtCreator.

L'exemple se déroule sur le projet liste_chainee qui reprend une liste chaînée, mais version C++, avec quelques problèmes qu'on va détecter puis corriger grâce à l'IDE. Ce code contient quelques points non vus encore en cours, ne vous inquiétez pas.

Lancement et ouverture

Ouvrez liste_chainee.pro. Vous pouvez aussi utiliser la ligne de commande avec qtcreator liste_chainee.pro &

Choisissez le kit de compilation par défaut.

Parcourez les différents fichiers du projet.

Ça ne compile pas !

  • Essayer d'exécuter (flêche droite en bas à gauche). Ça ne compile pas: il manque le getter de ListString::m_size.
  • Utilisez le refactor pour générer le getter :
    • Ouvrez ListString.hpp.
    • Cherchez la déclaration de l'attribut m_size.
    • Clic droit dessus pour avoir le menu contextuel.
    • Puis Refactoriser -> Generate Getter.

Menu refactor

\newpage

  • Suivant votre configuration de QtCreator, vous pouvez utiliser à nouveau le refactor pour déplacer corps du getter vers le fichier cpp.
  • Compilez pour vérifier que ça passe (icône marteau en bas à gauche).

Débogage

Ça boucle !

  • Exécutez le projet (flèche verte en bas à gauche). Ça boucle ! Arrêtez l'exécution en fermant le terminal interne attaché à l'exécution.
  • Allez ensuite dans l'onglet Debug. Choisissez Débogueur dans la liste déroulante des outils.

Bien choisir l'outil appelé débogueur

\newpage

  • Mettez un point d'arrêt dans le main, sur la ligne du premier for. Pour ce faire, cliquez dans l'espace libre à gauche des numéros de lignes. Un gros point rouge doit apparaître.
  • Lancez le débogage du projet.
  • Vous vous retrouvé bloquez sur le point d'arrêt. Repérérez bien la flêche jaune qui indique la position d'exécution courante.
  • Vous pouvez avancer d'une ligne en cliquant sur Passer (1 sur l'image). Le bouton Entrer Dans (2 sur l'image) permet de suivre l'exécution dans le corps d'une fonction.

Les boutons d'action du débogueur

  • Ainsi de suite, trouvez où vous restez bloqués.
  • Bon, maintenant, observez en détail le contenu de la variable matin (dans la barre à droite). Trouvez ce qui foire dedans.
  • Maintenant, arrêtez l'exécution (carré rouge). Recommencez, en utilisant éventuellement des points d'arrêt pour aller plus vite, et trouvez la ligne de code qui merde.
  • Corrigez.

Ça segfault !

  • Ah merde, maintenant, il y a une segfault!
  • Lancez en mode débogage .
  • Regardez la pile d'appel.
  • Corrigez! Passez à la suite!

Ça fuit !

  • Changez maintenant d'outil: toujours dans la perspective Debug, changer l'outil de Debogueur à Memcheck. Relancez le progamme en debug. Que dit Valgrind? Ou sont alloués les octets perdu? Corrigez le code.

Memcheck / Valgrind voit encore des erreurs

  • Il y a des encore de la mémoire accédée alors qu'elle a été libérée. Vous le verrez avec un memcheck.
  • Réfléchissez et corrigez!

Exemples de Qt

  • Des projets-exemples Qt sont disponibles via l'IDE dans l'onglet Accueil, dans la page Exemples, ainsi que dans la page Tutoriel.