• 10 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 12/10/18

Définissez des points d'arrêt conditionnels

À la fin du chapitre précédent, nous nous étions aperçus qu’une exception était levée lorsque la méthode CreateTask du modèle était appelée avec la valeur "sleep" dans le test VerifyAddTasks de T_TodoModels.cs. :

foreach (var taskName in GetTaskNames())
{
   model.CreateTask(taskName);
}

Un point d’arrêt a été défini. Maintenant, nous voudrions que l’exécution de la boucle foreach se mette en pause seulement lorsque taskName prend cette valeur. 

Pour cela, cliquez-droit sur le rond rouge du point d'arrêt et sélectionnez Conditions... :

Menu pour définir une condition sur un point d'arrêt
Menu pour définir une condition sur un point d'arrêt

Deux types de conditions nous intéressent, Conditional Expression et Hit Count :

Types d'expressions conditionnelles
Types d'expressions conditionnelles

Le premier permet de définir la condition d'arrêt, soit lorsqu'une expression booléenne est vraie, soit si sa valeur a changé :

Condition sur une expression booléenne
Condition sur une expression booléenne

L'expression taskName == "sleep" demande que le débogueur s'arrête lorsque la valeur de taskName est égale à "sleep" :

Expression booléenne basée sur une comparaison de chaine de caractères
Expression booléenne basée sur une comparaison de chaîne de caractères

Prenons un autre cas où l'on sait sur quelle itération d'une boucle s'arrêter. On peut utiliser le second type de condition en indiquant le nombre de fois que le débogueur doit passer sur le point d'arrêt avant de mettre l'exécution en pause :

Condition de point d'arrêt basée sur un compteur d'exécution
Condition de point d'arrêt basée sur un compteur d'exécution

Dans cet exemple, on demande de mettre en pause avant d'exécuter la quatrième itération du point d'arrêt.

Si vous regardez le code du test unitaire, vous verrez que la méthode GetTaskNames, qui retourne la liste des noms de tâches, propose la valeur "sleep" à la première itération ainsi qu'à la quatrième :

private IEnumerable<string> GetTaskNames()
{
    yield return "sleep";
    yield return "work";
    yield return "play Diablo";
    yield return "sleep";
}

Un tel point d’arrêt conditionnel permet donc de mettre en pause sur la dernière valeur "sleep".

Résumé

Dans ce chapitre, nous venons de voir comment demander au débogueur de mettre l’exécution du code en pause avant des instructions et même selon des conditions. Nous avons donc maintenant tout en main pour mettre en pause l'exécution juste avant d'appeler l'instruction qui va déclencher l'exception que nous pourchassons depuis le début de ce cours ! :pirate:

Nous ne savons cependant pas quoi faire pour sortir de la pause : le prochain détaillera comment en piloter l’exécution pas à pas.

Example of certificate of achievement
Example of certificate of achievement