Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LECTIONS_TPSPP!!!.doc
Скачиваний:
21
Добавлен:
16.12.2018
Размер:
1.41 Mб
Скачать

Загальний огляд процесу відлагодження

На практиці, відлагодження (debugging) – це зупинка та аналіз стану програми в певні моменти часу, можливість покрокового їх виконання та відслідковування значень змінних, стеку викликів функцій (Call Stack), допоміжного виводу тощо. Програмні засоби, які дозволяють виконувати ці дії, називаються відлагоджувачами (debuggers).

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

Основні операції відлагоджувача:

  1. Зупинка (Break/Pause). Призупиняє виконання програми і відображає поточний рядок виконання.

  2. Вихід (Stop/Terminate). Примусово завершує програму і припиняє процес відлагодження.

  3. Продовження виконання (Continue). Продовжує виконувати програму до її завершення або до досягнення наступної точки переривання.

  4. Наступний крок (Step Over). Виконує наступну операцію, не заглиблюючись у її внутрішню реалізацію.

  5. Крок всередину (Step Into). Переходить до ділянки коду, в якому описана реалізація функції і дозволяє відлагоджувати цю ділянку.

  6. Крок назовні (Step Out/Step Return). Виконує поточну функцію до кінця, після чого призупиняє програму в функції, яка лежить рівнем вище в стеку виклику.

  7. Виконання програми до заданого рядка (Run To Line). Виконує програму, доки не буде досягнутий заданий рядок.

Типові помилки при відлагодженні програм

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

  1. Намагання виправити помилку вгадуванням.

  2. Прагнення не «тратити час» на осмислення суті проблеми.

  3. Вирішення проблеми найпростішим та найтривіальнішим рішенням.

  4. Списання помилок в програмі на помилки компілятора, збої в роботі комп’ютера, віруси та інші «надприродні» проблеми.

Рекомендації щодо знаходження помилки

  1. Використовувати всі наявні дані для формулювання правильних гіпотез.

  2. Підібрати такий тестовий випадок, на якому проблема відтворюється.

  3. Випробувати код модульними тестами (unit tests).

  4. Використовувати весь доступний інструментарій.

  5. Постаратися відтворити проблему кількома різними способами.

Рекомендації щодо виправлення помилок

  1. Зрозуміти проблему, перш ніж починати виправляти її.

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

  3. Не поспішати, розслабитись.

  4. Перед виправленням зберегти оригінальну версію коду.

  5. За один раз вносити тільки одну зміну, змінювати код тільки усвідомлюючи мету цих змін.

  6. Перевірити, чи виправлений код працює коректно.

  7. Перевірити код на присутність подібних помилок.

«Агресивне» відлагодження

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

  1. Виконати повторне проектування і/або перегляд проблемної ділянки коду.

  2. Відкинути ділянку коду і переписати її заново.

  3. Стерти всю програму чи окремий модуль, і переписати її заново.

  4. Скомпілювати код з повною відлагоджувальною інформацією.

  5. Скомпілювати код з найбільшим рівнем зауважень компілятора, виправити код таким чином, щоб всі зауваження зникли.

  6. Створити середовище для автоматичного тестування і виконувати тести тривалий час, наприклад, всю ніч.

  7. При відлагодженні переступити через велику частину коду і зосередитись на ділянці коду, що може спричинити помилку.

  8. Доповнити код командами допоміжного виводу чи логування.

  9. Максимально відтворити конфігурацію апаратного забезпечення кінцевого користувача.

  10. Новий код вносити малими порціями, ретельно тестуючи кожну з них.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]