Konfigurer betingede pausepunkter i C#
C#-fejlfindingsprogrammet til Visual Studio Code understøtter muligheden for at konfigurere et pausepunkt, der kun udløses, hvis en betingelse er opfyldt. Denne type pausepunkt kaldes et betinget pausepunkt. Betingede pausepunkter kan konfigureres direkte eller ved at redigere et eksisterende pausepunkt.
Seddel
Visual Studio Code understøtter også et betinget pausepunkt, der udløses på baggrund af det antal gange, pausepunktet er blevet "ramt".
Lad os antage, at du foretager fejlfinding af et program, der behandler produktoplysninger i en flerdimensionel strengmatrix. Matrixen indeholder tusindvis af datapunkter. Det problem, du foretager fejlfinding af, synes at opstå for produkter, der er markeret som new. Din kode behandler matrixen i en for løkke. Du skal angive et pausepunkt i løkken, men du vil kun afbryde midlertidigt, når produkter er new.
Brug et standard pausepunkt til at undersøge et databehandlingsprogram
Erstat indholdet af Program.cs-filen med følgende kode:
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) ;Denne kode bruger en metode med navnet
LoadProductstil at indlæse data i matrixenproducts. Når dataene er indlæst, gentages koden via matrixen og kalder metoder med navnetProcess1ogProcess2.Hvis du vil generere data for de simulerede processer, skal du føje følgende metode til slutningen af din Program.cs-fil:
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; } }Metoden
LoadProductsgenererer 2000 tilfældige produkt-id'er og tildeler værdienexisting,newellerobsoletetil et produktbeskrivelsesfelt. Der er omkring en 1% chance for, at produkterne er markeretnew.Hvis du vil simulere databehandling, skal du føje følgende metoder til slutningen af din Program.cs-fil:
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"); }Metoderne
Process1ogProcess2viser statusmeddelelser og returnerer en streng.Bemærk, at metoden
Process2kalderProcess3, hvis produktet ernew.Vælg Gemi menuen Visual Studio Code File .
Angiv et pausepunkt på følgende kodelinje nær toppen af filen Program.cs:
result = Process1(products, i);Åbn visningen KØR OG FEJLFINDING, og vælg derefter Start fejlfinding.
Brug Step Into til at gennemgå koden for
Process1ogProcess2.Bemærk opdateringerne til afsnittene VARIABLES og CALL STACK i visningen RUN AND DEBUG.
Fortsæt med at bruge Step Into til at gennemgå koden, indtil du kan se, at den
ier lig med 3.I afsnittet VARIABLES i visningen RUN AND DEBUG vises den værdi, der er tildelt til
i.Bemærk, at og
Process1Process2få vist meddelelser i panelet DEBUG CONSOLE. Et reelt program kan kræve brugerinteraktioner, når data behandles. Nogle interaktioner kan være afhængige af de data, der behandles.Brug knappen Stop til at stoppe udførelsen af kode.
Konfigurer et betinget pausepunkt ved hjælp af et udtryk
Et standard pausepunkt er velegnet til at gennemgå et databehandlingsprogram. Men i dette tilfælde er du interesseret i new produkter, og du ønsker ikke at gennemgå analysen af hvert produkt for at finde dem, der er new. Dette scenarie er et godt eksempel på, hvornår betingede pausepunkter skal bruges.
Højreklik på dit eksisterende pausepunkt, og vælg derefter Rediger pausepunkt.
Angiv følgende udtryk:
products[i,1] == "new";Bemærk, at udtrykket ikke længere vises, når du har trykket på Enter.
Hvis du vil have vist udtrykket midlertidigt, skal du holde musemarkøren over pausepunktet (rød prik).
Hvis du vil køre dit program med det betingede pausepunkt konfigureret, skal du vælge Start fejlfinding.
Vent på, at programmet stopper midlertidigt ved det betingede pausepunkt.
Bemærk værdien af
i, der vises under afsnittet VARIABLER.På værktøjslinjen Fejlfindingskontrolelementer skal du vælge Fortsæt
Bemærk, at værdien af
ier blevet opdateret afsnittet VARIABLES.Vælg Trin ind.
Fortsæt med at vælge Trin ind ,
Process1indtil meddelelsen vises.Bemærk, at
Process1rapporterer, at det arbejder på et nyt produkt.Brug et øjeblik på at overveje den fordel, som betingede pausepunkter tilbyder.
I dette simulerede databehandlingsscenarie er der ca. 1% chance for, at et produkt er
new. Hvis du bruger et standard pausepunkt til at foretage fejlfinding af problemet, skal du gennemgå analysen af ca. 100 produkter for at finde et af denewprodukter, du er interesseret i.Betingede pausepunkter kan spare dig for meget tid, når du foretager fejlfinding af et program.
Brug knappen Stop til at stoppe udførelsen af kode.
Tillykke! Du har konfigureret et betinget pausepunkt.
Resumé
Her er to vigtige ting, du skal huske fra dette undermodul:
- Brug et standardpausepunkt til at afbryde et program midlertidigt, hver gang der opstår et pausepunkt.
- Brug et betinget pausepunkt til at afbryde et program midlertidigt, når et boolesk udtryk evalueres til
true.