À 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... :
Deux types de conditions nous intéressent, Conditional Expression et Hit Count :
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é :
L'expression taskName == "sleep" demande que le débogueur s'arrête lorsque la valeur de taskName est égale à "sleep" :
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 :
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 !
Nous ne savons cependant pas quoi faire pour sortir de la pause : le prochain détaillera comment en piloter l’exécution pas à pas.