Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
05.03.2016
Размер:
1.28 Mб
Скачать

1.5 Налагодження і трасування програм

Введена або завантажена з диску Пролог-програма після вибору в головному меню команди Run запускається системою на компіляцію і виконання. Але перш, ніж програма почне виконуватися, вона перевіряється на відповідність синтаксисові Турбо-Прологу, відсутність змішання значень з різних областей типів даних. Якщо при компіляції виявляється помилка, то відповідне повідомлення з'являється в нижньому рядку вікна редактори і курсор у вікні редагування вказує на місце помилки.

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

При виникненні непередбачених ситуацій варто перейти на покрокове трасування програми. Для цього в текст програми вводиться директива trace, що може бути вставлена в програму перед секцією predicates.

При виконанні програми, що містить директиву trace, у вікні "Трасування" по черзі виводяться всі цілі і твердження програми, використовувані в процесі її виконання. Це дозволяє стежити за ходом виконання програми, переходами від однієї мети до іншої, за процесом пошуку з поверненням.

Перехід від виконання однієї мети до іншої забезпечується натисканням клавіші F10. Натискання клавіші F10 викликає виконання поточної мети. Після її натискання, мета виводиться у вікні "Трасування", і так крок за кроком. Директива trace показує повну інформацію, усуваючи при цьому різні оптимізації, виконувані компілятором.

Наприклад, trace перешкоджає автоматичному знищенню рекурсії, так, що можна спостерігати всі повернення (RETURN) предиката. Повідомлення, що генеруються системою програмування Турбо-Пролог при виконанні покрокового трасування у вікні “Трасування” наведено в табл.1.1.

Коли трасується велика програма, що містить багато предикатів, то її можна налагоджувати, керуючи трасуванням. Якщо, наприклад, уже відомо, що предикат old_predicate(...) працює успішно, то твердження для предиката

new_predicate(...) :- old_predicate(...) , new_goal(...) , ...

може бути перевизначене в такий спосіб:

new_predicate(...) :- trace(off) , old_predicate(...), tracе(on), new_goal(...), ...

і трасування піде швидше.

Іншою можливістю керувати інформацією, виведеної при трасуванні, є звертання до предикатам трасування у формі

trace predicate_1, predicate_2, predicate_3, ...

яке виводить результати звертань (CALL) і повернень (RETURN) тільки для перерахованих у директиві trace предикатів predicate_1, predicate_2, predicate_3 і т.д.

Таблиця 1.1 – Повідомлення системи при трасуванні

Повідомлення системи

Пояснення до повідомлення системи

CALL

Щораз при виклику предиката у вікні "Трасування" відображаються ім'я предиката і значення його параметрів

RETURN

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

FAIL

Коли предикат не досяг успіху, відображається слово FAIL, за яким слідує ім'я даного предиката.

REDO

Указує на те, що має місце пошук з поверненням. Ім'я предиката, що повторно виконується, разом зі значеннями його параметрів відображається у вікні спостереження.