OnlineGDB ********* .. include:: ../BoutonGoogleTrad.rst Afin de tester les exemples et pour réaliser les divers exercices, nous recommandons pour la partie cours le site `www.onlinegdb.com `_. Son environnement permet une prise en main aisée et rapide sans installation et sans configuration. La partie projet se déroulera sous :cppterm:`Visual Studio Community 2022`. Vous trouverez plus bas une fiche complète détaillant son installation. ATTENTION, nous n'utilisons pas :cppterm:`Visual Studio Code` . Premiers pas ============ Après votre première connexion, sélectionnez l'environnement C++17, lancez l'exemple en cliquant sur le bouton :cppterm:`[RUN]`, la console de sortie en bas de la page affiche le résultat du traitement. .. image:: firstrun.gif :align: center :scale: 80% Breakpoint ========== * Dans la marge, cliquez à gauche du numéro de ligne pour créer un :cppterm:`breakpoint` (rond rouge). * Cliquez sur le bouton :cppterm:`[DEBUG]` pour activer le mode debug et son interface. * Cliquez sur le bouton :cppterm:`[START]` pour lancer le programme. * L'exécution s'arrête à la ligne 9 : * Les lignes 7 et 8 ont été exécutées. * La ligne 9 **sera** la prochaine ligne exécutée ➪ elle est encadrée en vert. * Dans l'interface de droite, les variables courantes sont affichées : * Les valeurs de :cpp:`a` et :cpp:`b` ont ainsi été initialisées. * La valeur de :cpp:`c` est quelconque car la ligne 9 n'est pas encore exécutée. * Appuyez sur le bouton :cppterm:`[STOP]` pour arrêter le programme et fermer l'interface de débogage. .. image:: breakpoint.gif :align: center :scale: 70% Le code associé : .. code-block:: cpp int main() { int a = 1; int b = 2; int c = 3; int d = 4; return 0; } .. quiz:: PlacerUnBreakpoint :title: Placer un breakpoint Positionnez un :cppterm:`breakpoint` dans le code pour que les variables :cpp:`a`, :cpp:`b` et :cpp:`c` valent 1, 2 et 3 et que :cpp:`d` ne soit pas encore affectée. Testez votre réponse avec onlinegdb. Pas à pas ========= Après l'arrêt sur un :cppterm:`breakpoint`, il est possible d'exécuter les lignes suivantes une par une : | • Créez un breakpoint à la ligne :cpp:`x=x*x+1;` | • Cliquez sur le bouton :cppterm:`[DEBUG]` puis :cppterm:`[START]`. | • L'exécution s'arrête à la ligne où est positionné le breakpoint : | :math:`~~~~~~~`• La ligne est entourée en vert. | :math:`~~~~~~~`• La variable :cpp:`x` vaut 2 et :cpp:`i` vient d'être initialisée à 0. | • Appuyez sur le bouton :cppterm:`[STEP INTO]` pour exécuter la ligne en vert : | :math:`~~~~~~~` • La valeur de :cpp:`x` passe à 5. | :math:`~~~~~~~` • La ligne en vert se place sur la boucle for. | • Appuyez sur le bouton :cppterm:`[STEP INTO]` pour exécuter la ligne en vert : | :math:`~~~~~~~` • La valeur de :cpp:`i` passe à 1. | :math:`~~~~~~~` • La ligne en vert se place sur la ligne :cpp:`x=x*x+1;` | • Appuyez sur le bouton :cppterm:`[STEP INTO]` pour exécuter la ligne en vert : | :math:`~~~~~~~` • La valeur de :cpp:`x` passe à 26. .. image:: stepover.gif :align: center :scale: 70% Le code associé : .. code-block:: cpp int main() { int x = 2; for (int i = 0 ; i < 8 ; i++) x = x * x + 1; return 0; } .. quiz:: StepOver :title: Mode pas à pas En utilisant le mode pas à pas, trouvez la valeur prise par la variable :cpp:`x` avant que la variable :cpp:`i` passe à 7. :quiz:`{"type":"FB","answer":"562847653"}` Les autres fonctions ==================== * :cppterm:`[Continue]` : permet de relancer le programme à pleine vitesse jusqu'à la rencontre d'un breakpoint. * :cppterm:`[StepOver]` sur une ligne contenant un appel de fonction : exécute la fonction et stoppe l'exécution à la ligne suivant son appel. * :cppterm:`[StepInto]` sur une ligne contenant un appel de fonction : entre dans le code de la fonction. * :cppterm:`[StepOut]` : termine la fonction courante à pleine vitesse et stoppe l'exécution à la ligne suivant son appel. Exercices ========= .. quiz:: blabla22222 :title: Débogage Indiquez si les affirmations suivantes sont vraies ou fausses : .. csv-table:: :widths: 10, 40 :delim: ! :quiz:`{"type":"TF","answer":"F"}` !Par défaut, les programmes sont lancés en mode Debug. :quiz:`{"type":"TF","answer":"T"}` !Le rond rouge symbolise un point d'arrêt. :quiz:`{"type":"TF","answer":"F"}` !En mode Debug, la ligne en vert est la ligne qui vient d'être exécutée. :quiz:`{"type":"TF","answer":"F"}` !Lorsque j'effectue un :cppterm:`[StepOver]` sur un appel de fonction, je rentre dans le code de cette fonction. :quiz:`{"type":"TF","answer":"F"}` !Lorsqu'une boucle s'éternise, je ne peux pas ressortir de la fonction. :quiz:`{"type":"TF","answer":"T"}` !Lorsque le programme s'exécute en mode pas à pas, je peux relancer son exécution à pleine vitesse.