Во время веб-поиска я нашел следующий комментарий: Традиционные методы отладки Lisp могут все еще использоваться.
Я не знаю, что конкретно имел в виду Билл, но IME:
Обычно к вашему редактору подключен работающий экземпляр. Вы можете скомпилировать функции немедленно, чтобы вставить их в работающий образ - поскольку у Lisp есть собственный компилятор, вы просто указываете работающему изображению прочитать и скомпилировать небольшой фрагмент текста. Или вы можете запускать функции напрямую, чтобы увидеть, что они делают.
Когда генерируется исключение (или сигнализируется условие, если вам посчастливилось быть на диалекте с условиями), отладчик покажет вам трассировку стека и позволит вам решить, как продолжить.
Основное различие между Lisp и другими высокоуровневыми компилируемыми языками состоит в том, что в Lisp вы в основном всегда пишете код с подключенным отладчиком.
Поскольку в вопросе было отмечено тегом clojure, я выскажу нашу точку зрения.
Файлы классов, сгенерированные компилятором clojure, включают информацию об отладке на основе строк и методов, поэтому любой отладчик java будет напрямую взаимодействовать с кодом clojure, включая точки останова и проверку объектов.
Если вы используете emacs / slime в качестве среды разработки, недавно была включена интеграция с отладчиком slime. Поскольку документация немного скудна, вероятно, лучше проверить объем поддержки напрямую на github.
В том, что я бы назвал "традиционным набором методов отладки Lisp", есть:
В основном это такие вещи, как добавление кода для вывода значений в процессе работы, чтобы вы могли видеть, что происходит.
Запустите edebug-defun в emacs, и вы увидите, что lisp - это магия.