Bedingte Haltepunkte in C# konfigurieren

Abgeschlossen

Der C#-Debugger für Visual Studio Code unterstützt die Option zum Konfigurieren eines Haltepunkts, der nur ausgelöst wird, wenn eine Bedingung erfüllt ist. Dieser Haltepunkttyp wird als bedingter Haltepunkt bezeichnet. Bedingte Haltepunkte können direkt oder durch Bearbeiten eines vorhandenen Haltepunkts konfiguriert werden.

Hinweis

Visual Studio Code unterstützt auch einen bedingten Haltepunkt, der basierend darauf ausgelöst wird, wie oft der Haltepunkt erreicht wurde.

Angenommen, Sie debuggen eine Anwendung, die Produktinformationen in einem mehrdimensionalen Zeichenfolgenarray verarbeitet. Das Array enthält Tausende von Datenpunkten. Das Problem, das Sie debuggen, scheint für Produkte zu auftreten, die als newgekennzeichnet sind. Ihr Code verarbeitet das Array innerhalb einer for-Schleife. Sie müssen einen Haltepunkt innerhalb der Schleife festlegen, möchten die Ausführung aber nur anhalten, wenn Produkte als new gekennzeichnet sind.

Verwenden eines Standardhaltepunkts zum Untersuchen einer Datenverarbeitungsanwendung

  1. Ersetzen Sie den Inhalt Ihrer Program.cs Datei durch den folgenden 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) ;
    

    Dieser Code verwendet eine Methode namens LoadProducts, um Daten in das products-Array zu laden. Nachdem die Daten geladen wurden, durchläuft der Code das Array und ruft Methoden namens Process1 und Process2 auf.

  2. Um Daten für die simulierten Prozesse zu generieren, fügen Sie am Ende der Program.cs Datei die folgende Methode hinzu:

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

    Die LoadProducts Methode generiert 2000 zufällige Produkt-IDs und weist einen Wert von existing, oder newobsolete einem Produktbeschreibungsfeld zu. Es besteht eine Wahrscheinlichkeit von etwa 1 %, dass die Produkte als new gekennzeichnet sind.

  3. Um die Datenverarbeitung zu simulieren, fügen Sie am Ende der Program.cs Datei die folgenden Methoden hinzu:

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

    Die Methoden Process1 und Process2 zeigen Statusmeldungen an und geben eine Zeichenfolge zurück.

    Beachten Sie, dass die Process2 Methode aufruft Process3 , wenn das Produkt ist new.

  4. Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.

  5. Legen Sie oben in der datei Program.cs einen Haltepunkt in der folgenden Codezeile fest:

    result = Process1(products, i);
    
  6. Öffnen Sie die Ansicht AUSFÜHREN UND DEBUGGEN, und wählen Sie die Option Debuggen starten aus.

  7. Verwenden Sie Step Into, um den Code für Process1 und Process2 durchzugehen.

    Beachten Sie die Updates der Abschnitte VARIABLEN und AUFRUFLISTE in der Ansicht AUSFÜHREN UND DEBUGGEN.

  8. Fahren Sie mit Step Into fort, um den Code durchzugehen, bis Sie sehen, dass i gleich 3 ist.

    Im Abschnitt VARIABLEN der Ansicht Run and Debug wird der Wert angezeigt, der i zugewiesen ist.

    Beachten Sie, dass Process1 und Process2 Meldungen im Panel DEBUG CONSOLE anzeigen. Eine echte Anwendung erfordert möglicherweise Benutzerinteraktionen, da Daten verarbeitet werden. Einige Interaktionen sind möglicherweise von den verarbeiteten Daten abhängig.

  9. Verwenden Sie die Schaltfläche "Beenden ", um die Codeausführung zu beenden.

Konfigurieren eines bedingten Haltepunkts mithilfe eines Ausdrucks

Ein Standardhaltepunkt eignet sich hervorragend zum Durchlaufen einer Anwendung zur Datenverarbeitung. In diesem Fall sind Sie jedoch an als new gekennzeichneten Produkten interessiert und möchten nicht die Analyse der einzelnen Produkte durchlaufen, um die Produkte mit der Markierung new zu finden. Dieses Szenario ist ein gutes Beispiel dafür, wann bedingte Haltepunkte verwendet werden sollen.

  1. Klicken Sie mit der rechten Maustaste auf ihren vorhandenen Haltepunkt, und wählen Sie dann " Haltepunkt bearbeiten" aus.

  2. Geben Sie den folgenden Ausdruck ein:

    products[i,1] == "new";
    
  3. Beachten Sie, dass der Ausdruck nach dem Drücken der EINGABETASTE nicht mehr angezeigt wird.

  4. Um den Ausdruck vorübergehend anzuzeigen, zeigen Sie mit dem Mauszeiger auf den Haltepunkt (roter Punkt).

  5. Wenn Sie Ihre Anwendung mit konfiguriertem bedingten Haltepunkt ausführen möchten, wählen Sie "Debuggen starten" aus.

  6. Warten Sie, bis die Anwendung am bedingten Haltepunkt pausiert.

  7. Beachten Sie den Wert, i der im Abschnitt VARIABLEN angezeigt wird.

  8. Wählen Sie auf der Symbolleiste "Debugsteuerelemente" die Option "Weiter" aus.

  9. Beachten Sie, dass der Wert von i im Abschnitt VARIABLEN aktualisiert wurde.

  10. Wählen Sie Einzelschritt aus.

  11. Fahren Sie mit der Auswahl von Step Into fort, bis die Process1 Nachricht angezeigt wird.

  12. Beachten Sie, dass Process1 berichte, dass es an einem neuen Produkt arbeitet.

  13. Nehmen Sie sich einen Moment Zeit, um den Vorteil zu berücksichtigen, den bedingte Haltepunkte bieten.

    In diesem simulierten Datenverarbeitungsszenario gibt es eine Wahrscheinlichkeit von 1%, dass ein Produkt new ist. Wenn Sie einen Standardhaltepunkt zum Debuggen des Problems verwenden, müssen Sie die Analyse von etwa 100 Produkten durchlaufen, um eines der mit new gekennzeichneten Produkte zu finden, an denen Sie interessiert sind.

    Durch bedingte Haltepunkte können Sie beim Debuggen einer Anwendung viel Zeit sparen.

  14. Verwenden Sie die Schaltfläche "Beenden ", um die Codeausführung zu beenden.

Glückwunsch! Sie haben erfolgreich einen bedingten Haltepunkt konfiguriert.

Zusammenfassung

Hier sind zwei wichtige Punkte, die Sie aus dieser Einheit beachten sollten:

  • Verwenden Sie einen Standardhaltepunkt, um eine Anwendung bei jedem Erreichen eines Haltepunkts anzuhalten.
  • Verwenden Sie einen bedingten Haltepunkt, um eine Anwendung anzuhalten, wenn ein boolescher Ausdruck als true ausgewertet wird.