Домівка > C++, Перекладені > Близько 10 прийомів для зневадження(debugging) у Visual Studio

Близько 10 прийомів для зневадження(debugging) у Visual Studio

Знедваження є однією з головних частин процесу розробки. Іноді це виклик, іноді головоломка, одно відомо достеменно – це неминуча частина процесу розробки нетривіальної програми. Розвиток засобів зневадження впродовж останніх років зробив багато задач, які постають під час зневадження, набагато легшими і швидшими.

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

1. Нависнути мишкою для отримання значення виразу


Зневадження може бути складним. Порядкове виконання функції для усвідомлення, що ж пішло не так, відстеження стеку викликів, щоб побачити звідки прийшло значення… У будь-якому випадку додавання виразів для спостереження (watch expressions) або перегляд списку локальних змінних може вимагати значного часу. Однак, все стає простішим, якщо ви просто наведете вказівник мишки на зміну значення якої вам цікаве. Більше того, класи і структури можна розгорнути простим натисканням миші, що дозволить побачити значення полів швидко і зручно.

2. Змінити значення на льоту


Зневаджувач – це значно більше ніж знаряддя для розбирання падінь і дивної поведінки. багато вад можна усунути простим крокуванням щойно створеною функцією і перевіркою, того, що вона поводиться як і очікувалось. Іноді виникає сумнів, “чи поводилось би функція згідно до вимог, якщо збільшити змінну на 5?”. І здебільшого це не вимагає переписування коду чи перезапуску. Лише наведіть мишку на змінну, подвійно клацніть на значенні й уведіть нове!

3. Встановити наступний до виконання вираз

10_tricks_change_next
Один з типових сценаріїв виявлення чому виклик функції видав помилку – це просування функцією рядок за рядком. І що робити, коли ви виявили, що функція викликає іншу функцію, яка повертає помилку, Перезапускати зневаджувач? Існує інший шлях: просто перетягти жовту позначку, на лінію, що виконуватиметься наступною і продовжити покрокове виконання. Просто, еге ж?

4. Виправити і продовжити

10_tricks_edit_n_continue
Зневаджували складну програму або плаґін? Знайшли помилку, але не бажаєте витрачати час зупиняючи, перезбираючи і перезапускаючи знов і функція з помилкою викликається занадто часто, щоб постійно використовувати попередній прийом? Немає проблем, лише виправте помилку і продовжуйте покрокове виконання. Visual Studio змінить вашу програму і продовжить зневадження без перезапуску програми.

Однак, знайте. Виправив-і-продовжив має набір відомих обмежень. Перше, воно не працює для 64 бітного коду. Якщо воно не працює для вашого застосунку на C#, заходьте налаштування проекту, сторінка Build, тоді обирайте “x86” як Platform Target. Не хвилюйтесь, Platform Target для конфігурації Release відрізняється від встановленої для зневадження і все ще може бути “Any CPU”.

Друге, виправив-і-продовжив зміни мають бути локальними, тобто в методі. Якщо ви змінили підпис методу (наприклад, типи параметрів), додали нові методи або класи, ви повинні будете перезапустити програму або відкотити зміни для продовження. Зміна методів, що містять лямбда-вирази потребує змін авто згенерованих класів-делегатів і, отже, не дозволяє продовження.

5. Зручне вікно спостереження

10_tricks_watch
Імовірно, кожен сучасний зневаджувач має вікно спостереження (watch window). Однак, що дійсно круто щодо зневаджувача Visual Studio це те, як легко ви можете додавати і видаляти змінні тут. Просто клацнути на порожньому рядку, надрукувати вираз і натиснути Enter. Або просто натиснути кнопку видалити для усунення виразу, що більше не потрібен.

Далі більше, інформація доступна у вікні спостереження не обмежується тільки нормальними змінними. Ви можете ввести $handles, щоб відстежити кількість хендлів відкритих вашим застосунком (так легше знайти течі пам’яті), $err, щоб побачити код помилки останньої функції (і тоді використати Tools->Error Lookup для отримання опису помилки) або @eax (@rax для 64-бітного коду), щоб побачити регістр, що містить значення, яке повертає функція.

6. Дизасемблювання з примітками

10_tricks_disassembly
Оптимізація швидкодії критичних частин вашої програми можна значно полегшити через використання інтерактивного режиму дизасеблювання. Visual Studio показує вам інструкції відповідні до кожного рядка вашого коду і дозволяє виконувати код покроково, а також встановлювати точки зупину в довільних місцях. І, звісно, обчислення і зміна виразів працюватимуть так само як і для C++ кода.

7. Вікно потоків зі стеками

Зневадження багатопотокових застосунків може бути болючим. Або це може бути в задоволення. Залежить від вашого зневаджувача. Одна з дійсно чудових властивостей Visual Studio 2010 – це можливість перегляду стека у вікні потоків. Ви можете отримати зручний огляд всіх потоків і пересуватись безпосередньо по їхніх стеках викликів.

8. Умовні точки зупину (breakpoints)

10_tricks_conditional
Якщо ви намагаєтесь відтворити рідкісну подію й отримуєте забагато хибних позитивних реакцій на вашій точці зупину, ви можете легко додати до неї умову! Просто визначте умову для цієї точки і Visual Studio автоматично пропускатиме точку зупину допоки умова не виконується.

9. Вікно пам’яті (Memory window)

10_tricks_mem_wnd
Деякі баги спричинені невказанням вирівнювання пам’яті і т.п. Перегляд умісту сирої пам’яті спрощує з’ясування місцезнаходження і виправлення таких багів. Visual Studio надає зручне вікно пам’яті, яке може інтерпретувати значення як 8/16/32/64-бітові числа, а також як числа з рухомою комою і дозволяє змінювати їх на ходу просто замінивши поточні значення на нові як в редакторі текстів. Для перегляду певної адреси просто впишіть у рядок адреси у вікні пам’яті щось на кшталт &test.

10. Перехід до визначення

10_tricks_go_to_def
Остання можливість, яку я хочу згадати не стосується зневадження прямо, швидше до дослідження великого проекту. Якщо ви намагаєтесь знайти баг в коді, який писали не ви, і вам потрібна швидка відповідь на питання “що це за тип” або “що ця функція має робити”, то ця можливість заощадить вам багато часу. Visual Studio надає можливість просто перейти до визначення.

10+1. Вікно команд (Command window)

10_tricks_command
Visual Studio підтримує Command Window, яке можна активувати через меню View->Other Windows->Command Window. По активації, ви можете виконувати різноманітні команди для автоматизації зневадження. Наприклад, для отримання стеку викликів поточного потоку можна використати команду Debug.ListCallStack.

Advertisements
Категорії:C++, Перекладені Позначки:,
  1. 05.07.2013 о 3:38 pm

    А якщо в мене убунту лінукс? І я теж хочу зневаджувати, але не знаю, як. Ви не знаєте, як це зробити в іншій системі?

  1. No trackbacks yet.

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

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: