При отключении режима отладки (кнопка Stop) все настройки сбрасываются в исходное состояние.
Кнопки управления трассировкой
Процедура трассировки выполнения программы с помощью отладчика предполагает возможность временной остановки вычислений в назначенных портах контрольных точек и продолжение вычислений, когда программист решит, что выведенная информация в данной контрольной точке им уже изучена.
Для управления трассировкой программы программист может использовать четыре команды, которые выбираются нажатием кнопок Creep, Leap, Skip, Fail.
1. Команда Creep. (Creep - медленно двигаться)
Эта команда используется для последовательного пошагового выполнения процедуры логического вывода программы и означает переход к ближайшему контролируемому порту (данной цели или следующей).
2. Команда Leap. (Leap - перепрыгивать)
Эта команда означает переход к ближайшему контролируемому порту ближайшей контрольной точки без вывода информации о промежуточных портах.
3. Команда Skip. (Skip - пропуск, обход)
Эта команда применяется только для входных портов Call и Redo. При ее выборе, отладчик будет безостановочно выполнять программу, пока не дойдет до какого-либо порта выхода (Exitили Fail)для данной цели. Эта команда дает возможность отключить вывод информации при выполнении доказательств вспомогательных целей, даже в установленных контрольных точках.
4. Команда Fail.
Это команда принуждает отладчик перейти к порту Fail текущей цели, т.е. завершить согласование этой цели неудачей.
Замечание.
Некоторые запросы могут иметь несколько ответов. После нахождения первого пользователь может либо продолжить поиск (ввести точку с запятой), либо завершить его (нажав Enter). Эти действия выполняются в окне интерпретатора. Когда включен режим отладки, то вся работа происходит в окне отладчика. При достижении той точки, где решение найдено, создается впечатление, что процесс отладки "зависает", так как при нажатии кнопок управления вычислениями никаких действий не происходит. В этом случае нужно перейти в окно интерпретатора (через список окон в меню Window) и принять решение, продолжать ли поиск других решений.
Содержание отладочной информации
Трассировка выполнения программы с помощью отладчика предполагает остановку в контрольных точках, где выполняется вывод информации о текущем состоянии программы. Общий формат сообщений при работе с отладчиком в среде разработки программ:
[Пробелы] Port: (Номер предложения) Term
Количество пробелов (отступ) в начале сообщения определяет количество предков текущей цели, уже вовлеченных в процесс доказательства.
Пример.
В рассмотренной в задании 2 программе есть утверждение о том, что некоторый профессор X является преподавателем у студента Y, если один работает, а второй учится на одной и той же специальности.
teacher(X,Y):-professor(X,Z),student(Y,Z).
и задан вопрос
?- teacher('Федор Федоров','Иван Иванов').
Тогда первой рассматриваемой целью будет teacher, а второй — professor, причем вторая цель доказывается как вспомогательная для первой (доказательство первой еще не завершено). Поэтому сообщение о втором вызове при выводе будет смещено правее первого:
Замечание
Когда отладчик приступает к доказательству очередной цели, он выводит сообщение, типа Calling: teacher / 2.
Port — в общем случае здесь указывается тип порта, для которого выводится отладочная информация. Первоначальное согласование каждой цели включает два действия: CALL и EXIT или CALL и FAIL. Если согласование цели не привело к успеху, но интерпретатор имеет возможность пересогласовать ее, то это выполняется через порт REDO, что соответствующим образом отражается в протоколе трассировки.
Однако, если цель согласовать заново нельзя (предположим, что из базы данных исключен факт для Анны Павловой), то в протоколе выводится сообщение FAIL, а не REDO, а затем регистрируется выход из процедуры согласования цели через порт FAIL. Т.е. сообщения FAIL могут выводиться дважды.
Term — это цель, для которой выполнен вход через порт CALL или REDO.
Номер утверждения — порядковый номер утверждения (факта или правила) в процедуре, которая используется для доказательства цели. Например, (3) в сообщении
означает, что в данный момент из процедуры student взято третье по счету утверждение (а именно, student('Иван Иванов','Информационные системы').
Замечания
1. При отладке имена предикатных переменных заменяются условными обозначениями, которые состоят из буквы H и некоторого целого числа, например H33.
2. При отладке подробная информация о выполнении системных (встроенных) предикатов не выводится, так как это не представляет интереса и для эффективности они реализованы на машинном уровне.
3. После завершения отладки информацию в окне отладки можно, удалить, выделив весь выведенный текст, и нажав кнопку Del. Так как курсор при завершении отладки обычно находится в конце выведенного текста, то выделить весь текст можно комбинацией Ctrl+Shift+Home.