Настроювання умовних точок зупинки в C#

Завершено

Налагоджувач C# для коду Visual Studio підтримує параметр настроювання точки зупинки, яка запускається, лише якщо умова виконується. Цей тип точки зупинки називається умовною точкою зупинки. Умовні точки зупинки можна настроїти безпосередньо або змінивши наявну точку зупинки.

Примітка

Код Visual Studio також підтримує умовну точку зупинки, яка запускається на основі кількості разів, коли точка зупинки була "хітом".

Припустімо, ви налагодите програму, яка обробляє відомості про продукт у багатовимірному масиві рядків. Масив містить тисячі точок даних. Проблема, яку ви налагодження, здається, виникає для продуктів, позначених як new. Код обробляє масив у циклі for . Ви повинні встановити точку зупинки всередині циклу, але ви хочете призупинити тільки тоді, коли продукти .new

Використання стандартної точки зупинки для перевірки застосунку обробки даних

  1. Замініть вміст файлу Program.cs на такий код:

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

    У цьому коді використовується метод, названий LoadProducts для завантаження даних у products масив. Після завантаження даних код ітералюється за допомогою масиву та методів викликів з іменем Process1 і Process2.

  2. Щоб створити дані для імітованих процесів, додайте такий метод до кінця файлу 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;
        }
    }
    

    Метод LoadProducts генерує 2000 випадкових ідентифікаторів продуктів і призначає значення existing, newабо obsolete поле опису продукту. Існує приблизно 1% ймовірність того, що продукти позначені new.

  3. Щоб імітувати обробку даних, додайте до кінця файлу 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");
    }
    

    Process1 І Process2 методи відображають повідомлення про перебіг виконання та повертають рядок.

    Зверніть увагу, що Process2 метод викликаєтьсяProcess3, якщо продукт .new

  4. У меню Файл код Visual Studio Code виберіть Зберегти.

  5. У верхній частині файлу Program.cs встановіть точку зупинки в такому коді:

    result = Process1(products, i);
    
  6. Відкрийте подання RUN AND DEBUG і натисніть кнопку Почати налагодження.

  7. Скористайтеся функцією Крок до , щоб переглянути код для Process1 та Process2.

    Зверніть увагу на оновлення розділів ЗМІННІ та СТЕК ВИКЛИКІВ у поданні RUN AND DEBUG.

  8. Продовжуйте використовувати крок до , щоб пройти через код, доки не побачите, що i дорівнює 3.

    У розділі ЗМІННІ в поданні RUN AND DEBUG відображається значення, призначене i.

    Зверніть увагу, що Process1 та Process2 відобразіть повідомлення на панелі DEBUG CONSOLE. Реальна програма може вимагати взаємодії з користувачем під час обробки даних. Деякі взаємодії можуть залежати від даних, які обробляються.

  9. Натисніть кнопку Зупинити , щоб зупинити виконання коду.

Настроювання точки умовного розриву за допомогою виразу

Стандартна точка зупинки чудово підходить для проходження програми обробки даних. Однак у цьому випадку ви зацікавлені в new продуктах, і ви не хочете, щоб пройти аналіз кожного продукту, щоб знайти ті, які є new. Цей сценарій – це чудовий приклад використання умовних точок зупинки.

  1. Клацніть правою кнопкою миші наявну точку зупинки та виберіть команду Змінити точку зупинки.

  2. Введіть такий вираз:

    products[i,1] == "new";
    
  3. Зверніть увагу, що вираз більше не відображається після натискання клавіші Enter.

  4. Щоб тимчасово відобразити вираз, наведіть вказівник миші на точку зупинки (червона крапка).

  5. Щоб запустити програму з настроєною умовною точкою зупинки, натисніть кнопку Почати налагодження.

  6. Зачекайте, доки програма призупиниться на умовній точці зупинки.

  7. Зверніть увагу на значення i , яке відображається в розділі VARIABLES.

  8. На панелі інструментів налагодження натисніть кнопку Продовжити

  9. Зверніть увагу, що значення i оновлено розділу VARIABLES.

  10. Натисніть кнопку Крок у.

  11. Продовжуйте натискати кнопку Крок до, доки не з'явиться Process1 повідомлення.

  12. Зверніть увагу, що Process1 він працює над новим продуктом.

  13. Зачекайте, щоб розглянути перевагу, яку пропонують умовні точки зупинки.

    У цьому сценарії імітації обробки даних існує приблизно 1% ймовірність того, що продукт .new Якщо для налагодження проблеми використовується стандартна точка зупинки, потрібно проаналізувати близько 100 продуктів, щоб знайти один із потрібних new продуктів.

    Умовні точки зупинки можуть заощадити багато часу під час налагодження програми.

  14. Натисніть кнопку Зупинити , щоб зупинити виконання коду.

Вітаємо! Умовну точку зупинки успішно настроєно.

Повторити введення

Ось дві важливі речі, які слід пам'ятати з цієї одиниці:

  • Використовуйте стандартну точку зупинки, щоб призупинити програму щоразу, коли відбувається точка зупинки.
  • Використовуйте умовну точку зупинки, щоб призупинити програму, коли логічний вираз обчислює значення true.