Voorwaardelijke onderbrekingspunten configureren in C#
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
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
LoadProductsvoor het laden van gegevens in deproductsmatrix. Nadat de gegevens zijn geladen, doorloopt de code de matrix en roept deze methoden aan met de naamProcess1enProcess2.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
LoadProductsmethode genereert 2000 willekeurige product-id's en wijst een waarde vanexisting,newofobsoleteeen veld met productbeschrijvingen toe. Er is ongeveer een kans van 1% dat de producten zijn gemarkeerdnew.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
Process1enProcess2methoden geven voortgangsberichten weer en retourneren een tekenreeks.U ziet dat de
Process2methode aanroeptProcess3als het product isnew.Selecteer Opslaan in het menu Visual Studio Code File.
Stel boven aan het Program.cs-bestand een onderbrekingspunt in op de volgende coderegel:
result = Process1(products, i);Open de weergave RUN AND DEBUG en selecteer Vervolgens Start Debugging.
Gebruik Step Into om door de code voor
Process1enProcess2te lopen.Let op de updates in de secties VARIABELEN en AANROEPSTACK van de weergave UITVOEREN EN DEBUGGEN.
Ga verder met stap in om de code te doorlopen totdat u ziet dat deze
igelijk 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
Process1enProcess2berichten 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.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.
Klik met de rechtermuisknop op het bestaande onderbrekingspunt en selecteer Vervolgens Onderbrekingspunt bewerken.
Voer de volgende expressie in:
products[i,1] == "new";U ziet dat de expressie niet meer wordt weergegeven nadat u op Enter hebt geklikt.
Als u de expressie tijdelijk wilt weergeven, beweegt u de muisaanwijzer boven het onderbrekingspunt (rode stip).
Als u uw toepassing wilt uitvoeren met het geconfigureerde voorwaardelijke onderbrekingspunt, selecteert u Foutopsporing starten.
Wacht totdat de toepassing is gestopt bij het voorwaardelijke onderbrekingspunt.
Let op de weergegeven waarde van
ionder het gedeelte VARIABELEN.Selecteer Doorgaan op de werkbalk voor Debuggen
U ziet dat de waarde van
ide sectie VARIABELEN is bijgewerkt.Selecteer Stap in.
Ga door met het selecteren van Stap in totdat het
Process1bericht wordt weergegeven.Merk op dat
Process1rapporteert dat het werkt aan een nieuw product.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
newis. Als u een standaardonderbrekingspunt gebruikt om het probleem op te sporen, moet u de analyse van ongeveer 100 producten doorlopen om een van denewproducten te vinden waarin u geïnteresseerd bent.Met voorwaardelijke onderbrekingspunten kunt u veel tijd besparen wanneer u fouten in een toepassing opspoort.
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.