Configurer des points d’arrêt conditionnels en C#
Le débogueur C# pour Visual Studio Code prend en charge l’option permettant de configurer un point d’arrêt qui se déclenche uniquement si une condition est remplie. Ce type de point d’arrêt est appelé point d’arrêt conditionnel. Les points d’arrêt conditionnels peuvent être configurés directement ou en modifiant un point d’arrêt existant.
Remarque
Visual Studio Code prend également en charge un point d’arrêt conditionnel qui se déclenche en fonction du nombre de fois où le point d’arrêt a été « atteint ».
Imaginons que vous déboguez une application qui traite des informations de produit dans un tableau de chaînes de caractères multidimensionnel. Le tableau comprend des milliers de points de données. Le problème que vous déboguez semble se produire pour les produits marqués comme new. Votre code traite le tableau à l’intérieur d’une for boucle. Vous devez définir un point d’arrêt à l’intérieur de la boucle, mais vous ne souhaitez suspendre que lorsque les produits sont new.
Utiliser un point d’arrêt standard pour examiner une application de traitement des données
Remplacez le contenu de votre fichier Program.cs par le code suivant :
int productCount = 2000; string[,] products = new string[productCount, 2]; LoadProducts(products, productCount); for (int i = 0; i < productCount; i++) { string result; result = Process1(products, i); if (result != "obsolete") { result = Process2(products, i); } } bool pauseCode = true; while (pauseCode == true) ;Ce code utilise une méthode nommée
LoadProductspour charger des données dans leproductstableau. Une fois les données chargées, le code effectue une itération dans le tableau et appelle des méthodes nomméesProcess1etProcess2.Pour générer des données pour les processus simulés, ajoutez la méthode suivante à la fin de votre fichier Program.cs :
static void LoadProducts(string[,] products, int productCount) { Random rand = new Random(); for (int i = 0; i < productCount; i++) { int num1 = rand.Next(1, 10000) + 10000; int num2 = rand.Next(1, 101); string prodID = num1.ToString(); if (num2 < 91) { products[i, 1] = "existing"; } else if (num2 == 91) { products[i, 1] = "new"; prodID = prodID + "-n"; } else { products[i, 1] = "obsolete"; prodID = prodID + "-0"; } products[i, 0] = prodID; } }La
LoadProductsméthode génère 2000 ID de produit aléatoires et affecte une valeur ,existingnewouobsoleteà un champ de description du produit. Il y a environ 1% chance que les produits soient marquésnew.Pour simuler le traitement des données, ajoutez les méthodes suivantes à la fin de votre fichier Program.cs :
static string Process1(string[,] products, int item) { Console.WriteLine($"Process1 message - working on {products[item, 1]} product"); return products[item, 1]; } static string Process2(string[,] products, int item) { Console.WriteLine($"Process2 message - working on product ID #: {products[item, 0]}"); if (products[item, 1] == "new") Process3(products, item); return "continue"; } static void Process3(string[,] products, int item) { Console.WriteLine($"Process3 message - processing product information for 'new' product"); }Les
Process1méthodes etProcess2affichent les messages de progression et retournent une chaîne.Notez que la
Process2méthode appelleProcess3si le produit estnew.Dans le menu Fichier de Visual Studio Code, sélectionnez Enregistrer.
En haut du fichier Program.cs, définissez un point d’arrêt sur la ligne de code suivante :
result = Process1(products, i);Ouvrez la vue RUN AND DEBUG, puis sélectionnez Démarrer le débogage.
Utilisez Entrer dans pour inspecter le code à l'intérieur de
Process1etProcess2.Notez les mises à jour apportées aux sections VARIABLES et PILE DES APPELS de la vue EXÉCUTER ET DÉBOGUER.
Continuez à utiliser Pas à Pas pour parcourir le code jusqu’à ce que vous constatiez que
iatteint la valeur 3.La section VARIABLES de la vue RUN AND DEBUG affiche la valeur affectée à
i.Notez que
Process1etProcess2affichez des messages dans le panneau CONSOLE DEBUG. Une application réelle peut nécessiter des interactions utilisateur au fur et à mesure que les données sont traitées. Certaines interactions peuvent dépendre des données en cours de traitement.Utilisez le bouton Arrêter pour arrêter l’exécution du code.
Configurer un point d’arrêt conditionnel à l’aide d’une expression
Un point d’arrêt standard est idéal pour parcourir une application de traitement des données. Toutefois, dans ce cas, vous êtes intéressé par new les produits et vous ne souhaitez pas parcourir l’analyse de chaque produit pour trouver ceux qui sont new. Ce scénario est un bon exemple de l’utilisation des points d’arrêt conditionnels.
Cliquez avec le bouton droit sur votre point d’arrêt existant, puis sélectionnez Modifier le point d’arrêt.
Entrez l’expression suivante :
products[i,1] == "new";Notez que l’expression n’est plus affichée après avoir appuyé sur Entrée.
Pour afficher temporairement l’expression, pointez le pointeur de la souris sur le point d’arrêt (point rouge).
Pour exécuter votre application avec le point d’arrêt conditionnel configuré, sélectionnez Démarrer le débogage.
Attendez que l’application s’interrompe au point d’arrêt conditionnel.
Notez la valeur affichée
isous la section VARIABLES.Dans la barre d’outils de contrôles de débogage, sélectionnez Continuer
Notez que la valeur de
ia été mise à jour dans la section VARIABLES.Sélectionnez Entrer dans.
Continuez à sélectionner Step Into jusqu’à ce que le
Process1message s’affiche.Notez qu’il
Process1signale qu’il travaille sur un nouveau produit.Prenez un moment pour prendre en compte l’avantage que les points d’arrêt conditionnels offrent.
Dans ce scénario de traitement des données simulé, il existe environ 1% probabilité qu’un produit soit
new. Si vous utilisez un point d’arrêt standard pour déboguer le problème, vous devez parcourir l’analyse d’environ 100 produits pour trouver l’un des produitsnewqui vous intéressent.Les points d’arrêt conditionnels peuvent vous faire gagner beaucoup de temps lorsque vous déboguez une application.
Utilisez le bouton Arrêter pour arrêter l’exécution du code.
Félicitations! Vous avez correctement configuré un point d’arrêt conditionnel.
Récapitulatif
Voici deux points importants à retenir de cette unité :
- Utilisez un point d’arrêt standard pour suspendre une application chaque fois qu’un point d’arrêt est rencontré.
- Utilisez un point d’arrêt conditionnel pour suspendre une application lorsqu’une expression booléenne prend
truela valeur .