Среда программирования на AutoLISP в графической системе AutoCAD (Справочник), страница 19

·  пошаговая обработка – т.е. возможность вычислять выражения в программе с остановкой после вычисления каждого выражения;

·  возможность сигнализировать об ошибке из программы на 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” – шаг в)

Позволяет идти глубже, т.е. вычислять параметры функции один за другим, если на текущем уровне имеется обращение к этой функции.