Налагодження у visual studio

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

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

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

Початок сеансу налагодження

Першим кроком налагодження програми є вибір командиStartDebugging(F5) на стандартній панелі інструментів або в менюDebug, після чого програма запускається в режимі налагодження.

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

Встановлення точок зупинки

Встановити точку зупинки на будь-якому рядку коду можна за допомогою клацання по полю індикаторів цього рядка (рис. 16). Або можна встановити курсор на потрібному рядку та натиснути клавішу F9.

налагодження

Малюнок 16. Встановлення точки зупинки

Перегляд даних у налагоджувачі

Коли виконання програми у сеансі налагодження призупинено(наприклад, за допомогою точки зупинки), можна вивчити стан та вміст її змінних та об'єктів. Для цього в VS можна використовувати три види вікон:Local(Локальні),Autos(Видимі)таWatch(Контрольні).

Доступ до вікон можна отримати натиснувшиDebug->Windows->вибрати потрібне вікно(Мал. 17)

програми

Малюнок 17. Доступ до вікон

ВікноLocalпоказує всі змінні та значення для поточної області видимості відладчика. Це дає вам уявлення про все, що є в поточній функції, що виконується. Змінні у цьому вікні організовані до списку та автоматично налаштовуються відладчиком. На рис. 18 показаний приклад вікнаLocal. З його допомогою можна побачити додаток нашого прикладу, який припинений до обнулення відповідних елементів масиву. Зверніть увагу, що об'єкт (масив)aрозгорнутий для того, щоб показати значення його елементів у момент припинення виконання програми. У міру встановлення значень результати відображатимуться в стовпціValue.

щоб побачити значення, пов'язані з тим рядком коду, на який ви дивитеся, можна використовувати вікноAutos. Це вікно показує значення всіх змінних і виразів, наявних у поточному рядку коду, що виконується, або в попередньому рядку коду. На рис. 19

показано вікноAutosдля того ж рядка коду, яка показана на рис. 18. Зверніть увагу на різницю.

ВікнаWatchу VS дозволяють налаштовувати власний список змінних та виразів, за якими потрібно спостерігати (рис. 20). ВікнаWatchвиглядають і поводяться так само, як і вікнаLocalіAutos. Крім того, елементи, які ви розміщуєте у вікнахWatch, зберігаються між сеансами налагодження.

visual

Малюнок 18.ВікноLocal

visual

Малюнок 19.ВікноAutos

Ви отримуєте доступ до віконWatchз меню або панелі інструментівDebug(рис. 17). Чотири вікнаWatch(які називаютьсяWatch1,Watch2,Watch3таWatch(4>4 ) дозволяють налаштувати чотири списки елементів, за якими необхідно спостерігати. Ця можливість може бути особливо корисною в тому випадку, коли кожен список відноситься до окремої області видимості вашої програми.

програми

Покрокове проходження для пошуку помилки

Після того як у нашому прикладі відладчик, зустрівши точку зупинки, перервав виконання програми, далі можна виконувати код по кроках (режим трасування ). Для цього можна вибратиStepintoна панелі інструментівDebugабо натиснути функціональну клавішуF11(Мал. 21). Це призведе до послідовного виконання коду по одному рядку, що дозволить вам бачити одночасно і хід виконання програми, і стан об'єктів програми в міру виконання коду. КомандаStepinto(F11) дозволяє просуватися за кодом по одному рядку. Виклик цієї команди виконає поточний рядок коду і помістить курсор на наступний рядок, що виконується. Важлива різниця міжStepintoта іншими схожими командами полягає в

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

Якщо зробити так у нашому прикладі, то ви побачите помилку: обнулення елементів масиву має починатися не з елемента з індексом i1, а з наступногоелемента i1+1.

КомандаStepout(F10) дозволяє вам зберігати фокус у поточній функції (не заходячи в підпрограми, що викликаються нею), тобто викликRunoutпризведе до виконання рядка за рядком, але не заведе вас у виклики функцій і при цьому наступної виконуваної

рядком для покрокового проходження стане наступний за викликом функції рядок.

можна

Рис 21. КомандаStepInto

Однією з найбільш зручних (і часто упущених) функціональних можливостей набору інструментів налагодження є функціяRuntocursor( Виконати до поточної позиції). Вона працює у повній відповідності до своєї назви. Ви встановлюєте курсор на код і викликаєте цю команду. Програма компілюється і виконується до тих пір, поки не доходить до того рядка, де знаходиться курсор. У цій точці відладчик перериває програму і видає вам цей рядок коду для покрокового проходження. Мал. 22.

програми

Малюнок 22. Виклик командиRunToCursor

Продовжити налагодження після точки зупинки можна повторним натисканням на кнопку F5 (StartDebugging).

налагодження

Малюнок 23. Результат роботи програми після виправлення помилки

Розглянемо покрокове виконання програми із використанням вікна Watch на найпростішому прикладі.