пятница, 10 апреля 2009 г.

Отладка в hunchentoot-1.0.0

Недавно я писал о проблемах с отладкой приложений для новой версии hunchentoot. Проблема обсуждалась в рассылке и наконец Andreas Fuchs предложил решение этой проблемы, как оказалось, достаточно тривиальное. Оригинальное сообщение можно посмотреть здесь: http://common-lisp.net/pipermail/tbnl-devel/2009-April/004688.html. Я несколько модифицировал этот код (добавил управление режимом через пресловутую переменную *catch-errors-p*):
(defvar *catch-errors-p* t)

(defclass debuggable-acceptor (hunchentoot:acceptor) ())

(defmethod hunchentoot:process-connection ((acceptor debuggable-acceptor) (socket t))
(declare (ignore socket))
(if *catch-errors-p*
(call-next-method)
(handler-bind ((error #'invoke-debugger))
(call-next-method))))

(defmethod hunchentoot:acceptor-request-dispatcher ((acceptor debuggable-acceptor))
(if *catch-errors-p*
(call-next-method)
(let ((dispatcher (handler-bind ((error #'invoke-debugger))
(call-next-method))))
(lambda (request)
(handler-bind ((error #'invoke-debugger))
(funcall dispatcher request))))))
Теперь, для получения удовольствия от использования отладчика достаточно просто использовать debuggable-acceptor вместо hunchentoot:acceptor при запуске сервера (hunchentoot:start).

Комментариев нет:

Отправить комментарий