|
|||||||||||||||||||||||||||||
Не будет сильным преувеличением сказать, что программирование в среде, которая не содержит
отладочных средств есть программистский экстрим. Поэтому все "хорошие" среды разработки
поддерживают отладку. Причем, некоторые отладчики представляют собой поистине величественные здания.
Так, например, отладчик известной системы LispWorks просто подавляет своими возможностями неискушенного
пользователя.
Отладчик HomeLisp доступен только при работе в IDE. Активизировать отладчик можно двумя способами: вызовом функции DEBUG или посредством нажатия кнопки на панели инструментов (выбора соответствующего пункта главного меню). Кнопка вызова отладчика на панели инструментов IDE показана ниже: Главное окно отладчика имеет вид:
Как можно увидеть из прилагаемого рисунка, органы управления отладкой
включают тулбар и две метки, одна из которых показывает состояние отладчика
(ожидание / выполнение), а другая показывает размер занятой области в стеке.
Шестая кнопка тулбара бывает активной только в процессе вычисления. Ниже назначение
всех кнопок тулбара будет описано более подробно.
Для задания точек останова при входе в нужные функции следует щелкнуть по первой слева кнопке тулбара. Будет отображено окно задания точки останова: Окно включает список с чекбоксами, содержащий все функции Лисп-машины на момент запуска отладчика. Имена функций упорядочены по алфавиту, а слева от имени в скобках показан тип функции. Пользователь может, листая список, найти нужную функцию и отметить ее чекбокс. Для облегчения поиска функции можно ввести ее имя (или часть имени) в область ввода и нажать ENTER (или щелкнуть по кнопке с изображением одного треугольника). Будет подведена первая функция списка, в имени которой содержатся (в любой позиции) введенные символы:
Для продолжения поиска следует щелкнуть по кнопке с изображением двух треугольников.
Будет подведено следующее имя, удовлектворяющее условию поиска. Отметив все нужные функции,
следует выйти из режима, щелкнув по крайней правой кнопке (на ней изображена черная стрелка).
Что означает эта картинка? Произошёл останов при входе в DIFFERENCE. Текущий лексический контекст содержит переменную x со значением 3. Если еще раз нажать кнопку автоматического выполнения, то будет произведен останов при выходе из DIFFERENCE, результат вычисления будет равен, естественно, двум: Таким образом, можно "прощелкать" все вызовы функций.
Когда вычисления остановлены, пользователь может выполнить любые вычисления в текущих контекстах (лексическом и глобальном). Для этого следует сначала щелкнуть по третьей кнопке тулбара главной формы отладчика. Будет отображено окно "Вычислить в текущем контексте". На этом окне расположен тулбар с тремя кнопками, область ввода выражения и область ответа. Пользователь вводит S-выражение в область ввода и щелкает по первой кнопке тулбара ("Вычислить"). В области ответа появляется результат:
Легко убедиться, что результат верен (вычисления велись в лексическом контексте, в котором x=2.
Вторая кнопка тулбара окна "Вычислить в текущем контексте" служит для очистки областей ввода и
результата.
Выйти из режима вычислений в текущем контексте (нажав последнюю кнопку тулбара с черной стрелкой), то можно убедиться, что вычисления могут быть продолжены. Разумеется, это справедливо только в случае, если вычисляемое в текущем контексте S-выражение не меняет сам контекст. В этом случае последствия ошибки труднопредсказуемы...
Другая возможность отладчика обеспечивает останов вычислений при изменении значения заданного символа. Чтобы задействовать эту возможность следует щелкнуть по второй кнопке тулбара главной формы отладчика (на кнопке изображен котёнок). Будет отображено окно "Наблюдение":
Чтобы вызвать останов вычислений при изменении значения символа следует задать этот символ
в поле ввода "Добавляемый символ" и нажать кнопку с красным плюсом. Символ будет перенесен
из области ввода в список символов (расположенный ниже). При попытке добавить символ повторно
добавления не происходит, а выводится предупреждение.
(prog (i) (for i 1 5 ((printline i))))
Добавим символ i к списку отслеживаемых символов и запустим вычисление в автоматическом режиме. Всякий раз, когда значение символа i будет меняться отладчик будет останавливаться:
|
|||||||||||||||||||||||||||||