Aller au menu - Aller au contenu

Icône Utiliser le débogueur

Mise à jour : 02/02/2012
Difficulté : Facile Facile Creative Commons BY-NC-SA
22 955 visites depuis 7 jours, dont 158 sur ce chapitre classé 15/786
Nous allons maintenant faire une petite pause. Le C# c'est bien, mais notre environnement de développement, Visual C# Express, peut faire beaucoup plus que sa fonction basique d'éditeur de fichiers. Il possède un outil formidable qui va nous permettre d'être très efficaces dans le débogage de nos applications et dans la compréhension de leur fonctionnement.

Il s'agit du débogueur. Découvrons vite à quoi il sert et comment il fonctionne
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

A quoi ça sert ?

Fidèle à son habitude de nous simplifier la vie, Visual C# express possède un débogueur. C’est un outil très pratique qui va permettre d’obtenir plein d’informations sur le déroulement de son programme.

Il va permettre d'exécuter les instructions les unes après les autres, de pouvoir observer le contenu des variables, de revenir en arrière, bref, de pouvoir savoir exactement ce qu’il se passe et surtout pourquoi tel bout de code ne fonctionne pas.

Pour l’utiliser, il faut que Visual C# express soit en mode « débogage ». Je n’en ai pas encore parlé. Pour ce faire, il faut exécuter l’application en appuyant sur F5 ou en passant par le menu Déboguer > Démarrer le débogage ou en cliquant sur le petit triangle vert dont l’icône rappelle un bouton de lecture.


Image utilisateur


Pour étudier le débogueur, reprenons la dernière méthode du précédent TP :

Code : C#
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
static void Main(string[] args)
{
    Console.WriteLine(CalculSommeIntersection());
}

static int CalculSommeIntersection()
{
    List<int> multiplesDe3 = new List<int>();
    List<int> multiplesDe5 = new List<int>();

    for (int i = 1; i <= 100; i++)
    {
        if (i % 3 == 0)
            multiplesDe3.Add(i);
        if (i % 5 == 0)
            multiplesDe5.Add(i);
    }

    int somme = 0;
    foreach (int m3 in multiplesDe3)
    {
        foreach (int m5 in multiplesDe5)
        {
            if (m3 == m5)
                somme += m3;
        }
    }
    return somme;
}

Mettre un point d’arrêt et avancer pas à pas

Pour que le programme s’arrête sur un endroit précis et qu’il nous permette de voir ce qu’il se passe, il va falloir mettre des points d’arrêts dans notre code.

Pour mettre un point d’arrêt, il faut se positionner sur la ligne où nous souhaitons nous arrêter, par exemple la première ligne où nous appelons Console.WriteLine et appuyer sur F9. Nous pouvons également cliquer dans la marge à gauche pour produire le même résultat. Un point rouge s’affiche et indique qu’il y a un point d’arrêt à cet endroit.

Image utilisateur


Il est possible de mettre autant de points d’arrêts que nous le souhaitons, à n’importe quel endroit de notre code.

Lançons l’application avec F5, nous pouvons voir que Visual C# express s’arrête sur la ligne prévue en la surlignant en jaune :

Image utilisateur


Nous en profitons pour remarquer au niveau du carré rouge que le débogueur est en pause et qu’il est possible soit de continuer l’exécution (triangle) soit de l’arrêter (carré) soit de redémarrer le programme depuis le début (carré avec une flèche blanche dedans).

Nous pouvons désormais exécuter notre code pas à pas, en nous servant des icônes à coté ou des raccourcis claviers suivants :

Image utilisateur


Utilisons la touche F10 pour continuer l’exécution du code pas à pas. La ligne suivante se trouve surlignée à son tour. Appuyons à nouveau sur la touche F10 pour aller à l’instruction suivante, il n’y en a plus le programme se termine.

Vous me direz, « c’est bien beau, mais, nous ne sommes pas passés dans la méthode CalculSommeIntersection() ». Et oui, c’est parce que nous avons utilisé la touche F10 qui est le pas à pas principal. Pour rentrer dans la méthode, il aurait fallu utiliser la touche F11 qui est le pas à pas détaillé.

Si nous souhaitons que le programme se poursuive pour aller jusqu’au prochain point d’arrêt, il suffit d’appuyer sur le triangle (play) ou sur F5.

Relançons notre programme en mode débogage, et cette fois-ci, lorsque le débogueur s’arrête sur notre point d’arrêt, appuyons sur F11 pour rentrer dans le corps de la méthode. Voilà, nous sommes dans la méthode CalculSommeIntersection(). Continuons à appuyer plusieurs fois sur F10 afin de rentrer dans le corps de la boucle for.

Observer des variables

À ce moment-là du débogage, si nous passons la souris sur la variable i, qui est l’indice de la boucle, Visual C# express va nous afficher une mini-information :

Image utilisateur


Il nous indique que i vaut 1, ce qui est normal, nous sommes dans la première itération de la boucle. Si nous continuons le parcours en appuyant sur F10 plusieurs fois, nous voyons que la valeur de i augmente, conformément à ce qui est attendu.
Maintenant, mettons un point d’arrêt - F9 - sur la ligne :

Code : C#
1
multiplesDe3.Add(i);


et poursuivons l’exécution en appuyant sur F5. Il s’arrête au moment où i vaut 3. Appuyons sur F10 pour exécuter l’ajout de i à la liste et passons la souris sur la liste :

Image utilisateur


Visual C# express nous indique que la liste multiplesDe3 a son « Count » qui vaut 1. Si nous cliquons sur le + pour déplier la liste :

Image utilisateur


nous pouvons voir que 3 a été ajouté dans le premier emplacement de la liste (indice 0). Si nous continuons l’exécution plusieurs fois, nous voyons que les listes se remplissent au fur et à mesure.

Enlevez le point d’arrêt sur la ligne en appuyant à nouveau sur F9 et mettez un nouveau point d’arrêt sur la ligne :

Code : C#
1
int somme = 0;


Poursuivez l’exécution avec F5, la boucle est terminée, nous pouvons voir que les listes sont complètement remplies :

Image utilisateur


Grâce au débogueur, nous pouvons voir vraiment tout ce qui nous intéresse, c’est une des grandes forces du débogueur et c’est un atout vraiment très utile pour comprendre ce qu’il se passe dans un programme (en général, ça se passe mal !).

Il est également possible de voir les variables locales en regardant en bas dans la fenêtre « Variables locales ». Dans cette fenêtre, vous pourrez observer les variables qui sont dans la portée courante. Il existe également une fenêtre « Espion » qui permet de la même façon de surveiller une ou plusieurs variables précises.

Image utilisateur

Revenir en arrière

Nom de Zeus, Marty ! On peut revenir dans le passé ?



C’est presque ça Doc ! Si pour une raison, vous souhaitez ré-exécuter un bout de code, parce que vous n’avez pas bien vu ou que vous avez raté l’information qu’il vous fallait, vous pouvez forcer le débogueur à revenir en arrière dans le programme. Pour cela, vous avez deux solutions, soit vous faites un clic droit à l’endroit souhaité et vous choisissez l’élément de menu Définir l’instruction suivante :

Image utilisateur


soit vous déplacez avec la souris la petite flèche jaune sur la gauche qui indique l’endroit où nous en sommes.

Image utilisateur


Il faut faire attention car ce retour en arrière n’en est pas complètement un. En effet, si vous revenez au début de la boucle qui calcule les multiples et que vous continuez l’exécution, vous verrez que la liste continue à se remplir. À la fin de la boucle, au lieu de contenir 33 éléments, la liste des multiples de 3 en contiendra 66. En effet, à aucun moment nous n'avons vidé la liste et donc le fait de ré-exécuter cette partie de code risque de provoquer des comportements inattendus. Ici, il vaudrait mieux revenir au début de la méthode afin que la liste soit de nouveau créée.

Même si ça ne vous saute pas aux yeux pour l’instant, vous verrez à l’usage que cette possibilité est bien pratique. D’autant plus quand vous aurez bien assimilé toutes les notions de portée de variable.

Il est important de noter que, bien que puissant, le débogueur de la version gratuite de Visual Studio est vraiment moins puissant que celui des versions payantes. Il y a plein de choses en moins que l’on ne peut pas faire.

Mais rassurez-vous, celui-ci est quand même déjà bien avancé et permet de faire beaucoup de choses.

La pile des appels

Une autre fenêtre importante à regarder est la pile des appels, elle permet d’indiquer où nous nous trouvons et par où nous sommes passés pour arriver à cet endroit-là.

Par exemple si vous appuyez sur F11 et que vous rentrez dans la méthode CalculSommeIntersection() vous pourrez voir dans la pile des appels que vous êtes dans la méthode CalculSommeIntersection() qui a été appelée depuis la méthode Main() :

Image utilisateur


Si vous cliquez sur la ligne du Main(), Visual C# express vous ramène automatiquement à l’endroit où a été fait l’appel. Cette ligne est alors surlignée en vert pour bien faire la différence avec le surlignage en jaune qui est vraiment l’endroit où se trouve le débogueur. C’est très pratique quand on a beaucoup de méthodes qui s’appellent les unes à la suite des autres.

Image utilisateur


La pile des appels est également affichée lorsqu’on rencontre une erreur, elle permettra d’identifier plus facilement où est le problème. Vous l'avez vu dans le chapitre sur les conversions entre les types incompatibles.


En tous cas, le débogueur est vraiment un outil à forte valeur ajoutée. Je ne vous ai présenté que le strict minimum nécessaire et indispensable. Mais croyez-moi, vous aurez l’occasion d’y revenir :) .

Q.C.M.

Que ne puis-je pas faire avec le formidable outil qu'est le débogueur ?
Quel est le raccourci permettant de rentrer en débogue dans une méthode ?
Soit le programme suivant :

Code : C#
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static void Main(string[] args)
{
    Methode1();
}

static void Methode1()
{
    Methode2();
}

static void Methode2()
{
    Methode3();
    Methode4();
}

static void Methode3()
{
}

static void Methode4()
{
}


Que va contenir la pile des appels si je mets un points d'arrêt dans la méthode 4 ?

Statistiques de réponses au QCM

En résumé


  • Le débogueur est un outil très puissant permettant d'inspecter le contenu des variables lors de l'exécution d'un programme.
  • On peut s'arrêter à un endroit de notre application grâce à un point d'arrêt.
  • Le débogueur permet d'exécuter son application pas à pas et de suivre son évolution.
Chapitre précédent Sommaire Chapitre suivant

Partager

8 commentaires pour "Utiliser le débogueur"
Note moyenne : 3.05 / 4 (230 votes)
Pseudo Commentaire
Hors ligne nico.pyright # Posté le 23/09/2011 à 10:27:29
Groupe : Auteurs

A quel endroit suggères-tu que ce chapitre figure ?
 
Hors ligne Nihak Ben # Posté le 12/04/2012 à 08:30:25
Avatar

Avis : Très bon

Question
Que ne puis-je pas faire avec le formidable outil qu'est le débogueur ?

La bonne réponse était
Faire le café

...
Hors ligne gfox78 # Posté le 16/04/2012 à 10:20:57
Avatar

Avis : Très bon

Ville : Marcq
Pays : France métropolitaine

Bonjour,
J'utilise Visual studio 2010 Express C# (gratuit, mais inscrit).
Je n'arrive pas à placer des breakpoints sur mon source, ni avec F9, ni avec la souris. Par contre, les fonctions pas-à-pas fonctionnent correctement avec affichage des variables.
J'ai cherché s'il n'y avait pas une option qui bloquait l'utilisation des points d'arrêt mais je n'ai rien trouvé.
Cette fonction "breakpoint" n'aurait-elle pas été occultée sur cette version gratuite ?
Le site "msdn.microsoft.com/fr-fr/library/02ckd1z7.aspx" intitulé "Comment: utiliser la fenêtre Points d'arrêt" semble confirmer mes doutes.
Merci de votre réponse et encore bravo pour votre tutoriel.
Amicalement.
Hors ligne nico.pyright # Posté le 16/04/2012 à 11:47:46
Groupe : Auteurs

Bonjour,

il est tout à fait possible de mettre des points d'arrêts avec la version gratuite de Visual Studio, c'est d'ailleurs avec cet outil que j'ai fait tout mon tutoriel.

Est-ce que votre point est rouge quand il est en débug ? Si vous passez la souris dessus, n'indique-t-il pas un problème ? Parfois, il faut nettoyer sa solution et la regénérer
 
Hors ligne gfox78 # Posté le 16/04/2012 à 15:13:48
Avatar

Avis : Très bon

Ville : Marcq
Pays : France métropolitaine

Merci,
J'ai réussi à mettre des points d'arrêt: je ne cliquais pas suffisamlent à gauche, sur la marge grise. Par contre, le raccourci-clavier F9 ne semble pas fonctionner chez moi, mais cela ne me gêne pas.

Voir tous les commentaires