Трассировка функций в 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)
выдает на экране все отмеченные функции вместе со счетчиком вызовов каждой из них.