· пошаговая обработка – т.е. возможность вычислять выражения в программе с остановкой после вычисления каждого выражения;
· возможность сигнализировать об ошибке из программы на LISP.
7.1. Функции, используемые при работе с отладчиком
(*user_break* <аргумент>)
определяемая пользователем функция – фильтр прерывания. Если такое определение существует в результате выполнения функций DEBUG и BREAK, то осуществляется обращение к этой функции с единственным параметром. Если функция возвращает не nil, происходит переход к интерактивной отладке, в противоположном случае – не происходит.
(debug <функция>…)
указывает, что при вызове любой функции из списка, необходимо перейти к интерактивной отладке. При вызове функций, помеченных таким образом, расчитанные параметры выводятся в том же в виде, что и для “трассируемых” функций. Если определена функция *USER_BREAK*, имя отлаживаемой функции передается фильтру прерывания в качестве параметра.
(undebug <функция>…)
Отменяет действие предыдущей функции.
(break <аргумент>)
обеспечивает переход к интерактивной отладке при явном обращении к функции BREAK внутри отлаживаемой программы. Если определен фильтр прерывания, то <аргумент> передается в качестве параметра этому фильтру.
Можно включать обращение к функции BREAK только в определенных частях программы: внутри PROGN; среди дополнительных параметров для функций WHILE, FOREACH, REPEAT; и на верхнем уровне функции.
(errset ,<выражение>)
обеспечивает изоляцию части программы таким образом, чтобы ошибка в этой части программы не повлияла на выполнение программы в целом (образование “окна ошибок”).
Если встретится ошибка при вычислении <выражения>, функция возвращает nil. В случае успешного выполнения вычислений она вернет то же самое, что и выражение (list <выражение>).
(signal_error <строка>)
обеспечивает прерывание вычислений.
Результат выполнения функций SIGNAL_ERROR такой же, как и при любой обработке ошибок. Все правила,касающиеся вызова цикла прерывания, окна ошибок и специальных функций обработки ошибок типа *ERROR*, остаются в действии. Параметр функции SIGNAL_ERROR всегда выводится, а функции *ERROR* передается строка “Signal error”.
7.2. Интерактивная отладка
Переменная AutoLISP *BREAK* управляет операциями. Если переменной присвоено значение Т (и не определено никакой *ERROR* - функции), процедура обычной обработки ошибок прерываеся, и управление передается пользователю.
В случае появления ошибки или прерывания выполнения пользователем с использованием клавиш <Ctrl>/Break выводится обычное сообщение об ошибке и появляется идентификатор интерактивной отладки:
Debug1: > error breakloop
После этого сообщения выдается запрос “Command: ”. Никакая информация по трассе не выдается.
В случае появления особой ситуации при отладке (вызов функции BREAK; вызов функции, помеченной для отладки; прерывание с пульта) появляется запрос:
Debug1: >
В обоих случаях возможно посмотреть состояние всех переменных (или в случае скомпилированных функций, всех неместных переменных), а также выполнить ряд специальных интерактивных команд:
Reset
для того, чтобы покинуть цикл прерывания, набрав в ответ на запрос “Command: ”. Будет выдано сообщение: Reset break level nnn (сброс прерывания на уровне nnn)
Это вызовет продолжение обычной процедуры обработки ошибки.
Cont
для того, чтобы продолжить выполнение программы. Будет выдано сообщение
continue… (продолжить…) в некоторых случаях продолжить выполнение программы нельзя. При использовании в таких случаях cont выдаетсясообщение
can’t continue (нельзя продолжить).
st (сокращение от “step” - шаг)
позволяет вычислить следующее выражение на том же самом уровне, т.е. следующее выращение на верхнем уровне внутри defun, lambda или progn.
Si (сокращение от “step in” – шаг в)
Позволяет идти глубже, т.е. вычислять параметры функции один за другим, если на текущем уровне имеется обращение к этой функции.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.