6.2 KiB
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.
- Vous avez le choix entre "Application Qt" (avec et sans graphismes) ou "Application non Qt" (typiquement pour du pur C++).
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.
- Ouvrez
\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.
\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.
- 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 pageExemples
, ainsi que dans la pageTutoriel
.