Точка зупину

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

То́чка розбиття́ або то́чка зупи́ну (англ. breakpoint; сленнґ. бря́ка) — це позначка місця припинення чи призупинення виконання програми, яка застосовується для відладки ПЗ. Точки розбиття також називають просто паузами або точками зупину.

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

Умови призупинення програми[ред.ред. код]

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

Інструменти перевірки[ред.ред. код]

По досягненню ТЗ використовуються різні інструменти для перевірки стану програми або його редагування. Для того щоб побачити які функції були потрібні щоб викликати ТЗ, необхідно трасувати стек кожного потоку виконання. Список точок спостереження (watches) дозволяє дослідити, які значення мають певні змінні і твердження. Також існують інструменти, що використовуються для відображення вмісту регістрів, завантажених модулів програми та іншої інформації.

Варіанти реалізації[ред.ред. код]

Апаратними засобами[ред.ред. код]

Багато процесорів забезпечують апаратну підтримку для використання точок розбиття (типово, командні та інформаційні ТЗ). Набори команд архітектури x86 процесорів забезпечують апаратну підтримку для ТЗ із x86 зневаджувальними регістрами. В деяких випадках в мікроархітектурі процесора укладається обмеження, що не дозволяє застосовувати ТЗ, які встановлені на код в командних слотах. Наявність такого обмеження залежить від типу процесора.

Програмним забезпеченням[ред.ред. код]

Без використання апаратного запезпечення, відладчики реалізувуються програмно. Для того щоб застосувати ТЗ достатньо замінити команду в необхідному місці на одну з наведених нижче:

  • Команда, яка викликає зневаджувач напряму (напр. системний виклик(system call));
  • Неправильна команда, навмисно вставлена в місце, де необхідно зупинити програму (така, що потім буде оброблятись відладчиком);

АБО

  • За допомогою набору команд симулятора можливо реалізувати умовні і безумовні точки зупинки, через просте вкладення відповідних умов тестів в ході виконання нормального програмного циклу — це також закономірно дозволяє реалізувати непримусові точки зупину (наприклад в програмах призначених тільки для читання).
  • Інтерпретовані мови також можуть ефективно використовувати зазначену вище концепцію у своєму програмному циклі.
  • Оснащення сирцевого коду додатковими структурами коду, які породжують функції виклику внутрішніх чи зовнішніх засобів зневадження, є ще одним альтернативним варіантом. Використання цього методу призводить до зростання обсягу бінарного коду та може перешкоджати звичайному доступу до пам'яті та обробці виключень. Опція «Зневадження» («Debug») присутня у деяких компіляторів та напів-прозоро втілює даний підхід.

Деякі налагоджувачі дозволяють модифікувати програму «на льоту» (під час паузи при виконанні програмного циклу). Зазвичай це дає можливість обійтися без повторного компілювання програми і уникнути її перезапуску. Також це дає змогу застосувати власноруч написані, тимчасові команди для проведення тестування. Деякий код часто може бути просто пропущеним для того, щоб визначити вплив такої дії на логіку програми; можна наприклад пропустити перевірку якоїсь умови, опинившись у блоці коду, який за нормальних умов ніколи не виконується. У багатьох випадках це може бути єдиним можливим засобом для тестування незрозумілих помилок, спричинених подіями підпрограми, які рідко, якщо взагалі коли-небудь, правильно виконуються — без додаткового ризику зберегти тимчасові зміни сирцевого коду.

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

Наприклад, деякі діалекти мови FORTRAN мають команду AT, яка з самого початку була створена щоб слугувати інструкцією зупинки. Python реалізує дебагер доступний з програм на Python. Такими можливостями можна (і часом так роблять) зловживати використовуючи їх як аналог команди COMEFROM.

Джерела[ред.ред. код]