Configurarea punctelor de întrerupere condițională în C#

Finalizat

Depanatorul C# pentru Visual Studio Code acceptă opțiunea de a configura un punct de întrerupere care se declanșează doar dacă este îndeplinită o condiție. Acest tip de punct de întrerupere se numește punct de întrerupere condițional. Punctele de întrerupere condiționale pot fi configurate direct sau editând un punct de întrerupere existent.

Notă

Visual Studio Code acceptă, de asemenea, un punct de întrerupere condițional care declanșează în funcție de numărul de "accesări" ale punctului de întrerupere.

Să presupunem că depanați o aplicație care procesează informațiile despre produs într-o matrice de șiruri multidimensionale. Matricea include mii de puncte de date. Problema pe care o depanați pare să apară pentru produsele marcate ca new. Codul procesează matricea într-o buclă for . Trebuie să setați un punct de întrerupere în buclă, dar doriți să puneți în pauză doar atunci când produsele sunt new.

Utilizarea unui punct de întrerupere standard pentru a examina o aplicație de procesare a datelor

  1. Înlocuiți conținutul fișierului Program.cs cu următorul cod:

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

    Acest cod utilizează o metodă denumită LoadProducts pentru a încărca date în products matrice. După ce se încarcă datele, codul se iterează prin metodele de matrice și apeluri denumite Process1 și Process2.

  2. Pentru a genera date pentru procesele simulate, adăugați următoarea metodă la sfârșitul fișierului 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;
        }
    }
    

    Metoda LoadProducts generează ID-uri de produs aleatoare 2000 și atribuie o valoare de existing, newsau obsolete unui câmp descriere produs. Există aproximativ 1% șanse ca produsele să fie marcate new.

  3. Pentru a simula procesarea datelor, adăugați următoarele metode la sfârșitul fișierului 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");
    }
    

    Metodele și Process1 afișează mesajele Process2 de progres și returnează un șir.

    Observați că Process2 metoda apelează Process3 dacă produsul este new.

  4. În meniul Fișier Visual Studio Code, selectați Salvare.

  5. Lângă partea de sus a fișierului Program.cs, setați un punct de întrerupere în următoarea linie de cod:

    result = Process1(products, i);
    
  6. Deschideți vizualizarea RULARE ȘI DEPANARE, apoi selectați Pornire depanare.

  7. Utilizați Pasul în pentru a parcurge codul pentru Process1 și Process2.

    Observați actualizările secțiunilor VARIABLES și CALL STACK din vizualizarea RULARE ȘI DEPANARE.

  8. Continuați să utilizați Pasul În pentru a parcurge codul până când vedeți că i este egal cu 3.

    Secțiunea VARIABILE din vizualizarea RULARE ȘI DEPANARE afișează valoarea atribuită ilui .

    Observați că Process1 și Process2 afișați mesaje în panoul CONSOLĂ DEBUG. O aplicație reală poate necesita interacțiuni cu utilizatorul pe măsură ce sunt procesate datele. Unele interacțiuni pot depinde de datele procesate.

  9. Utilizați butonul Oprire pentru a opri executarea codului.

Configurarea unui punct de întrerupere condițională utilizând o expresie

Un punct de întrerupere standard este foarte bun pentru parcurgerea unei aplicații de procesare a datelor. Cu toate acestea, în acest caz vă interesează new produsele și nu doriți să parcurgeți analiza fiecărui produs pentru a le găsi pe cele care sunt new. Acest scenariu este un exemplu bun de utilizare a punctelor de întrerupere condițională.

  1. Faceți clic dreapta pe punctul de întrerupere existent, apoi selectați Editare punct de întrerupere.

  2. Introduceți următoarea expresie:

    products[i,1] == "new";
    
  3. Observați că expresia nu se mai afișează după ce apăsați pe Enter.

  4. Pentru a afișa temporar expresia, treceți cu indicatorul mouse-ului peste punctul de întrerupere (punct roșu).

  5. Pentru a rula aplicația cu punctul de întrerupere condiționată configurat, selectați Pornire depanare.

  6. Așteptați ca aplicația să se oprească la punctul de întrerupere condițională.

  7. Observați valoarea afișată i în secțiunea VARIABILE.

  8. Pe bara de instrumente Depanare controale , selectați Continuare

  9. Observați că valoarea i a fost actualizată secțiunea VARIABILE.

  10. Selectați Pas cu pas.

  11. Continuați să selectați Pasul în până când Process1 se afișează mesajul.

  12. Observați că Process1 raportează că funcționează la un produs nou .

  13. Luați un moment pentru a lua în considerare avantajul oferit de punctele de întrerupere condițională.

    În acest scenariu de procesare a datelor simulate, există aproximativ 1% șanse ca un produs să fie new. Dacă utilizați un punct de întrerupere standard pentru a depana problema, ar trebui să parcurgeți analiza a aproximativ 100 de produse pentru a găsi unul dintre new produsele care vă interesează.

    Punctele de întrerupere condițională vă pot economisi mult timp atunci când depanați o aplicație.

  14. Utilizați butonul Oprire pentru a opri executarea codului.

Felicitări! Ați configurat cu succes un punct de întrerupere condiționată.

Recapitula

Iată două lucruri importante de reținut din această unitate:

  • Utilizați un punct de întrerupere standard pentru a pune în pauză o aplicație de fiecare dată când se întâlnește un punct de întrerupere.
  • Utilizați un punct de întrerupere condițional pentru a pune în pauză o aplicație atunci când o expresie booleană se evaluează la true.