Voorwaardelijke onderbrekingspunten configureren in C#

Voltooid

Het C#-foutopsporingsprogramma voor Visual Studio Code ondersteunt de optie om een onderbrekingspunt te configureren dat alleen wordt geactiveerd als aan een voorwaarde wordt voldaan. Dit type onderbrekingspunt wordt een voorwaardelijk onderbrekingspunt genoemd. Voorwaardelijke onderbrekingspunten kunnen rechtstreeks worden geconfigureerd of door een bestaand onderbrekingspunt te bewerken.

Opmerking

Visual Studio Code ondersteunt ook een voorwaardelijk onderbrekingspunt dat wordt geactiveerd op basis van het aantal keren dat het onderbrekingspunt is bereikt.

Stel dat u fouten opspoort in een toepassing die productinformatie verwerkt in een multidimensionale tekenreeksmatrix. De matrix bevat duizenden gegevenspunten. Het probleem dat u aan het debuggen bent, lijkt op te treden voor producten die zijn gemarkeerd als new. Uw code verwerkt de matrix binnen een for lus. U moet een onderbrekingspunt in de lus instellen, maar u wilt alleen onderbreken wanneer producten new zijn.

Een standaardonderbrekingspunt gebruiken om een gegevensverwerkingstoepassing te onderzoeken

  1. Vervang de inhoud van uw Program.cs bestand door de volgende code:

    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) ;
    

    Deze code maakt gebruik van een methode met de naam LoadProducts voor het laden van gegevens in de products matrix. Nadat de gegevens zijn geladen, doorloopt de code de matrix en roept deze methoden aan met de naam Process1 en Process2.

  2. Als u gegevens voor de gesimuleerde processen wilt genereren, voegt u de volgende methode toe aan het einde van uw Program.cs-bestand:

    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;
        }
    }
    

    De LoadProducts methode genereert 2000 willekeurige product-id's en wijst een waarde van existing, newof obsolete een veld met productbeschrijvingen toe. Er is ongeveer een kans van 1% dat de producten zijn gemarkeerd new.

  3. Als u gegevensverwerking wilt simuleren, voegt u de volgende methoden toe aan het einde van uw Program.cs-bestand:

    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");
    }
    

    De Process1 en Process2 methoden geven voortgangsberichten weer en retourneren een tekenreeks.

    U ziet dat de Process2 methode aanroept Process3 als het product is new.

  4. Selecteer Opslaan in het menu Visual Studio Code File.

  5. Stel boven aan het Program.cs-bestand een onderbrekingspunt in op de volgende coderegel:

    result = Process1(products, i);
    
  6. Open de weergave RUN AND DEBUG en selecteer Vervolgens Start Debugging.

  7. Gebruik Step Into om door de code voor Process1 en Process2 te lopen.

    Let op de updates in de secties VARIABELEN en AANROEPSTACK van de weergave UITVOEREN EN DEBUGGEN.

  8. Ga verder met stap in om de code te doorlopen totdat u ziet dat deze i gelijk is aan 3.

    In de sectie VARIABELEN van de weergave UITVOEREN EN FOUTOPSPORING wordt de waarde weergegeven die is toegewezen aan i.

    U ziet dat Process1 en Process2 berichten worden weergegeven in het deelvenster DEBUG CONSOLE. Voor een echte toepassing zijn mogelijk gebruikersinteracties vereist wanneer gegevens worden verwerkt. Sommige interacties zijn mogelijk afhankelijk van de gegevens die worden verwerkt.

  9. Gebruik de knop Stoppen om de uitvoering van code te stoppen.

Een voorwaardelijk onderbrekingspunt configureren met behulp van een expressie

Een standaard onderbrekingspunt is ideaal voor het doorlopen van een gegevensverwerkingstoepassing. In dit geval bent u echter geïnteresseerd in new producten en wilt u niet de analyse van elk product doorlopen om de producten te vinden die zijn new. Dit scenario is een goed voorbeeld van wanneer voorwaardelijke onderbrekingspunten moeten worden gebruikt.

  1. Klik met de rechtermuisknop op het bestaande onderbrekingspunt en selecteer Vervolgens Onderbrekingspunt bewerken.

  2. Voer de volgende expressie in:

    products[i,1] == "new";
    
  3. U ziet dat de expressie niet meer wordt weergegeven nadat u op Enter hebt geklikt.

  4. Als u de expressie tijdelijk wilt weergeven, beweegt u de muisaanwijzer boven het onderbrekingspunt (rode stip).

  5. Als u uw toepassing wilt uitvoeren met het geconfigureerde voorwaardelijke onderbrekingspunt, selecteert u Foutopsporing starten.

  6. Wacht totdat de toepassing is gestopt bij het voorwaardelijke onderbrekingspunt.

  7. Let op de weergegeven waarde van i onder het gedeelte VARIABELEN.

  8. Selecteer Doorgaan op de werkbalk voor Debuggen

  9. U ziet dat de waarde van i de sectie VARIABELEN is bijgewerkt.

  10. Selecteer Stap in.

  11. Ga door met het selecteren van Stap in totdat het Process1 bericht wordt weergegeven.

  12. Merk op dat Process1 rapporteert dat het werkt aan een nieuw product.

  13. Neem even de tijd om rekening te houden met het voordeel dat voorwaardelijke onderbrekingspunten bieden.

    In dit gesimuleerde gegevensverwerkingsscenario is er ongeveer een kans van 1% dat een product new is. Als u een standaardonderbrekingspunt gebruikt om het probleem op te sporen, moet u de analyse van ongeveer 100 producten doorlopen om een van de new producten te vinden waarin u geïnteresseerd bent.

    Met voorwaardelijke onderbrekingspunten kunt u veel tijd besparen wanneer u fouten in een toepassing opspoort.

  14. Gebruik de knop Stoppen om de uitvoering van code te stoppen.

Gefeliciteerd! U hebt een voorwaardelijk onderbrekingspunt geconfigureerd.

Samenvatting

Hier volgen twee belangrijke dingen die u in deze les moet onthouden:

  • Gebruik een standaardonderbrekingspunt om een toepassing te onderbreken telkens wanneer er een onderbrekingspunt wordt aangetroffen.
  • Gebruik een voorwaardelijk onderbrekingspunt om een toepassing te pauzeren wanneer een booleaanse expressie evalueert naar true.