Настроювання умовних точок зупинки в C#
Налагоджувач C# для коду Visual Studio підтримує параметр настроювання точки зупинки, яка запускається, лише якщо умова виконується. Цей тип точки зупинки називається умовною точкою зупинки. Умовні точки зупинки можна настроїти безпосередньо або змінивши наявну точку зупинки.
Примітка
Код Visual Studio також підтримує умовну точку зупинки, яка запускається на основі кількості разів, коли точка зупинки була "хітом".
Припустімо, ви налагодите програму, яка обробляє відомості про продукт у багатовимірному масиві рядків. Масив містить тисячі точок даних. Проблема, яку ви налагодження, здається, виникає для продуктів, позначених як new. Код обробляє масив у циклі for . Ви повинні встановити точку зупинки всередині циклу, але ви хочете призупинити тільки тоді, коли продукти .new
Використання стандартної точки зупинки для перевірки застосунку обробки даних
Замініть вміст файлу 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.Щоб створити дані для імітованих процесів, додайте такий метод до кінця файлу 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.Щоб імітувати обробку даних, додайте до кінця файлу 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У меню Файл код Visual Studio Code виберіть Зберегти.
У верхній частині файлу Program.cs встановіть точку зупинки в такому коді:
result = Process1(products, i);Відкрийте подання RUN AND DEBUG і натисніть кнопку Почати налагодження.
Скористайтеся функцією Крок до , щоб переглянути код для
Process1таProcess2.Зверніть увагу на оновлення розділів ЗМІННІ та СТЕК ВИКЛИКІВ у поданні RUN AND DEBUG.
Продовжуйте використовувати крок до , щоб пройти через код, доки не побачите, що
iдорівнює 3.У розділі ЗМІННІ в поданні RUN AND DEBUG відображається значення, призначене
i.Зверніть увагу, що
Process1таProcess2відобразіть повідомлення на панелі DEBUG CONSOLE. Реальна програма може вимагати взаємодії з користувачем під час обробки даних. Деякі взаємодії можуть залежати від даних, які обробляються.Натисніть кнопку Зупинити , щоб зупинити виконання коду.
Настроювання точки умовного розриву за допомогою виразу
Стандартна точка зупинки чудово підходить для проходження програми обробки даних. Однак у цьому випадку ви зацікавлені в new продуктах, і ви не хочете, щоб пройти аналіз кожного продукту, щоб знайти ті, які є new. Цей сценарій – це чудовий приклад використання умовних точок зупинки.
Клацніть правою кнопкою миші наявну точку зупинки та виберіть команду Змінити точку зупинки.
Введіть такий вираз:
products[i,1] == "new";Зверніть увагу, що вираз більше не відображається після натискання клавіші Enter.
Щоб тимчасово відобразити вираз, наведіть вказівник миші на точку зупинки (червона крапка).
Щоб запустити програму з настроєною умовною точкою зупинки, натисніть кнопку Почати налагодження.
Зачекайте, доки програма призупиниться на умовній точці зупинки.
Зверніть увагу на значення
i, яке відображається в розділі VARIABLES.На панелі інструментів налагодження натисніть кнопку Продовжити
Зверніть увагу, що значення
iоновлено розділу VARIABLES.Натисніть кнопку Крок у.
Продовжуйте натискати кнопку Крок до, доки не з'явиться
Process1повідомлення.Зверніть увагу, що
Process1він працює над новим продуктом.Зачекайте, щоб розглянути перевагу, яку пропонують умовні точки зупинки.
У цьому сценарії імітації обробки даних існує приблизно 1% ймовірність того, що продукт .
newЯкщо для налагодження проблеми використовується стандартна точка зупинки, потрібно проаналізувати близько 100 продуктів, щоб знайти один із потрібнихnewпродуктів.Умовні точки зупинки можуть заощадити багато часу під час налагодження програми.
Натисніть кнопку Зупинити , щоб зупинити виконання коду.
Вітаємо! Умовну точку зупинки успішно настроєно.
Повторити введення
Ось дві важливі речі, які слід пам'ятати з цієї одиниці:
- Використовуйте стандартну точку зупинки, щоб призупинити програму щоразу, коли відбувається точка зупинки.
- Використовуйте умовну точку зупинки, щоб призупинити програму, коли логічний вираз обчислює значення
true.