Урок №30. Відлагодження програм: стек викликів і відстежування змінних

  Юрій  | 

  Оновл. 21 Лип 2021  | 

 365

На попередньому уроці про степпінг і точки зупину, ми дізналися, як, з їх використанням, можна контролювати виконання програми крок за кроком. Проте на цьому не закінчуються всі корисні можливості відлагоджувача. Він також дозволяє відстежувати значення змінних.

Примітка: Перед тим, як продовжити, переконайтеся, що ви знаходитеся в режимі конфігурації “Debug”.

Відстеження змінних

Відстеження змінних — це процес перевірки значень змінних під час відлагодження. Наприклад:

Результат виконання програми:

1 2 4 8

Використовуючи команду "Выполнить до текущей позиции" перейдіть до рядка std::cout << x << " ";:

До цього моменту змінна х вже створена і ініціалізована, тому при перевірці цієї змінної ми побачимо число 1.

Найпростіший спосіб відстеження простих змінних (як х) — це наведення курсору миші на елемент. Більшість сучасних відлагоджувачів підтримують цю можливість:

Зверніть увагу, ви можете навести курсор миші на будь-яку іншу змінну (і на будь-якому рядку):

В Visual Studio є ще одна можливість — "Быстрая проверка". Виділіть змінну х за допомогою миші > ПКМ (права кнопка миші) > "Быстрая проверка...":

З’явиться спеціальне вікно зі значенням поточної змінної:

Добре, тепер закриваємо це вікно.

Значення змінних можна відстежувати і під час виконання відлагодження. Перемістіться за допомогою команди “Шаг с обходом” до рядка std::cout << x << " ";:

Значення змінної х повинно змінитися на 2. Перевірте!

Вікно перегляду

Команда "Быстрая проверка" або наведення курсору на елемент підходять для статичного перегляду змінних, але не дуже підходять для відстеження модифікацій змінних під час виконання програми, так як з кожним новим виконаним рядком доведеться заново наводити курсор на елемент або використовувати "Быстрая проверка".

Для вирішення цієї проблеми, всі сучасні відлагоджувачі пропонують ще один інструмент — вікно перегляду. Вікно перегляду — це вікно, в яке можна додавати змінні для постійного відстежування, вони будуть автоматично оновлюватися при послідовному виконанні програми. Вікно перегляду вже може бути підключене і відображатися у вашій робочій області, але якщо це не так, то ви можете це виправити, перейшовши в налаштування вашої IDE.

У Visual Studio для відображення вікна перегляду вам потрібно перейти в "Отладка" > "Окна" > "Контрольные значения" > "Контрольные значения 1":

Примітка: Ви повинні знаходитися в режимі відлагодження — використайте для цього команду “Шаг с заходом”.

Ви повинні побачити наступне:

Поки що в цьому вікні нічого немає, так як ми ще нічого не додавали. Є 2 шляхи:

   Ввести ім’я змінної, яку ми хочемо відстежувати, в колонку "Имя" в вікні перегляду.

   Виділити змінну, яку ми хочемо відстежувати > клацнути правою кнопкою миші і вибрати "Добавить контрольное значение".

Спробуйте додати змінну х в вікно перегляду:

Тепер виберіть команду "Шаг с обходом" декілька разів і стежте за змінами значення вашої змінної!

Стек викликів

Сучасні відлагоджувачі мають ще одне інформаційне вікно, яке може бути дуже корисним при відлагодженні програм — стек викликів.

При виконанні функції, як ви вже знаєте, програма залишає закладку в поточному місцезнаходженні, виконує функцію, а потім повертається в місце, де залишила закладку. Програма відстежує всі виклики функцій в стеці викликів.

Стек викликів — це список всіх активних функцій, які викликалися до поточного місцезнаходження. В стек викликів записується функція, що викликається, і рядок, який виконується. Всякий раз, коли відбувається виклик нової функції, ця нова функція додається в самий верх стеку. Коли виконання поточної функції зупиняється, вона видаляється з верхньої частини стеку і управління переходить до функції, яка розміщена нижче (тобто, друга за рахунком).

Відобразити вікно стеку викликів в Visual Studio можна через "Отладка" > "Окна"> "Стек вызовов":

Примітка: Ви повинні знаходитися в режимі відлагодження — використайте для цього команду "Шаг с заходом".

Розглянемо приклад:

Вкажіть точку зупину у функції CallC(), а потім запустіть відлагодження. Програма виконається до точки зупину.

Незважаючи на те, що ви знаєте, що зараз виконується CallC(), в програмі є два виклики CallC() (в функції CallB() і в функції CallA()). Яка функція відповідальна за виклик CallC() в даний момент? Стек викликів нам це покаже:

Спочатку виконується функція main(). Потім main() викликає CallA(), яка, в свою чергу, викликає CallB(). Функція CallB() викликає CallC(). Ви можете клацнути двічі по різним рядкам у вікні "Стек вызовов", щоб побачити більше інформації про функції, що викликаються. Деякі IDE переносять курсор безпосередньо до виклику зазначеної функції. Visual Studio переносить курсор до наступного рядка, який знаходиться після виклику функції. Спробуйте! Для того, щоб відновити степпінг, клацніть двічі по самому верхньому (першому) рядку в вікні "Стек вызовов" і ви повернетеся до поточної точки виконання.

Виберіть команду "Продолжить". Точка зупину повинна спрацювати вдруге, коли буде повторний виклик функції CallC() (на цей раз з функції CallA()). Все, що відбувається, ви повинні побачити у вікні "Стек вызовов":


Висновки

Тепер ви знаєте про основні можливості вбудованих відлагоджувачів! Використовуючи степпінг, точки зупину, відстеження змінних і вікно "Стек вызовов" ви можете успішно проводити відлагодження програм.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (7 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *