Configurer des points d’arrêt conditionnels en C#

Terminé

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

  1. 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 LoadProducts pour charger des données dans le products tableau. Une fois les données chargées, le code effectue une itération dans le tableau et appelle des méthodes nommées Process1 et Process2.

  2. 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 LoadProducts méthode génère 2000 ID de produit aléatoires et affecte une valeur , existingnewou obsolete à un champ de description du produit. Il y a environ 1% chance que les produits soient marqués new.

  3. 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 Process1 méthodes et Process2 affichent les messages de progression et retournent une chaîne.

    Notez que la Process2 méthode appelle Process3 si le produit est new.

  4. Dans le menu Fichier de Visual Studio Code, sélectionnez Enregistrer.

  5. En haut du fichier Program.cs, définissez un point d’arrêt sur la ligne de code suivante :

    result = Process1(products, i);
    
  6. Ouvrez la vue RUN AND DEBUG, puis sélectionnez Démarrer le débogage.

  7. Utilisez Entrer dans pour inspecter le code à l'intérieur de Process1 et Process2.

    Notez les mises à jour apportées aux sections VARIABLES et PILE DES APPELS de la vue EXÉCUTER ET DÉBOGUER.

  8. Continuez à utiliser Pas à Pas pour parcourir le code jusqu’à ce que vous constatiez que i atteint la valeur 3.

    La section VARIABLES de la vue RUN AND DEBUG affiche la valeur affectée à i.

    Notez que Process1 et Process2 affichez 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.

  9. 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.

  1. Cliquez avec le bouton droit sur votre point d’arrêt existant, puis sélectionnez Modifier le point d’arrêt.

  2. Entrez l’expression suivante :

    products[i,1] == "new";
    
  3. Notez que l’expression n’est plus affichée après avoir appuyé sur Entrée.

  4. Pour afficher temporairement l’expression, pointez le pointeur de la souris sur le point d’arrêt (point rouge).

  5. Pour exécuter votre application avec le point d’arrêt conditionnel configuré, sélectionnez Démarrer le débogage.

  6. Attendez que l’application s’interrompe au point d’arrêt conditionnel.

  7. Notez la valeur affichée i sous la section VARIABLES.

  8. Dans la barre d’outils de contrôles de débogage, sélectionnez Continuer

  9. Notez que la valeur de i a été mise à jour dans la section VARIABLES.

  10. Sélectionnez Entrer dans.

  11. Continuez à sélectionner Step Into jusqu’à ce que le Process1 message s’affiche.

  12. Notez qu’il Process1 signale qu’il travaille sur un nouveau produit.

  13. 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 produits new qui vous intéressent.

    Les points d’arrêt conditionnels peuvent vous faire gagner beaucoup de temps lorsque vous déboguez une application.

  14. 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 .