Трассировка функций в muLisp.

Язык программирования muLisp для трасировки использует программу debug.lsp, которая загружается в среду Лиспа. Для того, чтобы разрешить трасировку функции <func>, необходимо вызвать функцию (TRACE <func>). Если после этого вызвать функцию func с параметрами, то на экране отобразится путь выполнения функции. На каждом шаге будет выводиться имя функции и список фактических параметров. После выполнения функции на экран выводится значение функции. Команда (UNTRACE-FUNCTION <func>) запрещает трасировку функции <func>. Если в теле функции <func> существует вызов других функций, и мы хотим увидеть их трассировку, необходимо разрешить их трассировку.

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

Если вывод трассы происходит очень быстро, для временной остановки трассы можно использовать <CTRL-S>.

Например, рассмотрим трассирование функции APPEND (слияние двух списков). После вызовов функций командами

 

$ (setq echo T) (wrs 'ddd.dat) (TRACE ‘APPEND)

$ (APPEND '(q w e) (r t y u))

на экране и в файле ddd.dat отобразится трасса:

APPEND [(Q W E), (R T Y U)]

APPEND [(W E), (R T Y U)]

APPEND [(E), (R T Y U)]

APPEND [NIL, (R T Y U)]

APPEND = (R T Y U)

APPEND = (E R T Y U)

APPEND = (W E R T Y U)

APPEND = (Q W E R T Y U)

(Q W E R T Y U)

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

(CDR 'CALLCOUNT)

выдает на экране все отмеченные функции вместе со счетчиком вызовов каждой из них.