25. Débogueur#

Le débogage est un processus qui permet de trouver et de corriger les erreurs (aussi appelées bugs) dans le code. Il permet de comprendre le comportement du code lors de son exécution, de repérer les erreurs et de les corriger. Il existe différentes méthodes pour déboguer un code, allant de la simple lecture du code à l’utilisation d’outils de débogage avancés, comme le débogueur.

Nous utiliserons Spyder pour présenter son déboguer intégré. Il permet de mettre en pause l’exécution du code, d’inspecter les variables et de continuer l’exécution pas à pas.

Les concepts de base du débogage sont :

  • Les points d’arrêt : ce sont des marqueurs que l’on peut placer dans le code pour indiquer à l’ordinateur de s’arrêter à un endroit particulier pendant l’exécution.

  • Les variables : ce sont les valeurs stockées dans la mémoire de l’ordinateur qui sont utilisées pour exécuter le code. Les variables d’environnement peuvent être inspectées pour comprendre comment le code fonctionne.

  • Les commandes de débogage : ce sont des commandes qui permettent de contrôler l’exécution du code, comme mettre en pause l’exécution, continuer pas à pas, et inspecter les variables d’environnement.

25.1. Lancer du débogueur#

Vous pouvez lancer le programme en mode debug à partir de menu éponyme. Si votre programme ne contient pas de point d’arrêt alors, l’exécution sera bloqué dès le début du fichier, sinon, l’exécution avancera jusqu’au premier point d’arrêt avant de se stoper.

À partir de là, vous pourrez exécuter les instructions les unes après les autres et regarder l’état de la mémoire pour vérifier que tout se passe comme attendu.

Pour fixer un point d’arrêt, cliquez dans la marge gauche du code source. Un point d’arrêt est représenté par une marque rouge.

../_images/breakpoint.png

Fig. 25.1 Ajout d’un breakpoint dans la marge à la ligne 10.#

25.2. Exécuter des instructions#

Les commandes suivantes sont disponibles pour avancer dans l’exécution. Elles doivent être saisies dans la fenêtre de débogage. Voici les principales :

  • !next ou !n, exécuter jusqu’à la ligne suivante ;

  • !step ou !s, entrer dans la prochaine fonction appelée ou exécuter jusqu’à la ligne suivante ;

  • !return ou !r, exécuter jusqu’à la sortie de la fonction actuelle ;

  • !continue ou !c exécuter jusqu’au prochain point d’arrêt ;

  • !quit ou !q quitter le débogueur.

../_images/commandes.png

Fig. 25.2 Les commandes doivent être saisies dans la fenêtre du debogueur.#

On peut également utiliser les bouttons correspondants avec dans l’ordre :

  • lancer le débogueur ;

  • next ;

  • step ;

  • return ;

  • continue ;

  • arrêter le débogueur.

../_images/raccourcis.png

Fig. 25.3 Les bouttons de raccourcis pour remplacer les commandes.#

Lors de l’exécution, le débogueur indique la ligne courante avec une flèche bleu dans la marge.

../_images/current_line.png

Fig. 25.4 La ligne courrante est indiquée avec la flèche bleue dans la marge.#

25.3. Explorer les variables#

Dans la fenêtre du débogueur, il est possible de saisir des instructions. Cela permet d’observer le contenu des variables, de le modifier ou même d’exécuter tout type de code.

Une fenêtre est dédiée à l’affichage des variables locales à la fonction courrante.

../_images/variables.png

Fig. 25.5 La fenêtre d’exploration des variables.#

25.4. Exercices#

Utilisez le débogueur pour corriger le code suivant.

def sort_list(l):
    l2 = l[:]
    for i in range(len(l2)):
        for j in range(len(l2)):
            if l2[j+1] < l2[j]:
                tmp = l2[j]
                l[j] = l2[j+1]
                l[j+1] = tmp

def main():
    l = [2, 4, 0, 3]
    ls = sort_list(l)

    print("Liste triée : " + str(ls))
    
main()