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

  Юрій  | 

  Оновл. 23 Кві 2020  | 

 156

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

Перед тим, як продовжити: Переконайтеся, що ви знаходитеся в режимі конфігурації “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 Зірок (3 оцінок, середня: 5,00 з 5)
Loading...

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

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