On Fri, Nov 13, 2009 at 8:45 AM, Hans Hübner hans.huebner@gmail.com wrote:
On Fri, Nov 13, 2009 at 17:37, Frode V. Fjeld frode@netfonds.no wrote:
It's rather easy to modify the standard process-request to call invoke-debugger, but wouldn't it make sense to have something like hunchentoot:*invoke-debugger-on-error-p* ?
This is a common question which has been discussed a number of times. We've meant to put some debugging hints into the documentation, yet we've failed to do so, sorry about that.
The answer is: Use *break-on-signals* to have your Lisp enter the debugger when a certain condition type is signalled. See http://l1sp.org/cl/*break-on-signals* for details.
Hunchentoot used to have a special variable like you suggested, but we felt that it is better to use the language facilities rather than to invent special purpose mechanisms. Learning how to use *break-on-signals* is something that is useful anyway, so please try it out to see if it fits your needs.
In case *break-on-signals* doesn't meet your needs (for instance, if there are a lot of errors that get signaled and handled that can't be distinguished by type from the errors you want to go into the debugger on, you can also use something like this code which I got from someone on #lisp (antifuch's maybe?)
;;; An acceptor that invokes the debugger on errors: (defclass debuggable-acceptor (hunchentoot:acceptor) ())
(defvar *debug-connections* nil)
(defmethod process-connection ((*acceptor* debuggable-acceptor) (socket t)) (declare (ignore socket)) (if *debug-connections* (handler-bind ((error #'invoke-debugger)) (call-next-method)) (call-next-method)))
(defmethod acceptor-request-dispatcher ((*acceptor* debuggable-acceptor)) (let ((dispatcher (call-next-method))) (lambda (request) (handler-bind ((error #'invoke-debugger)) (funcall dispatcher request)))))
Then start your Hunchentoot instance with something like:
(start (make-instance 'debuggable-acceptor :port whatever))
-Peter
tbnl-devel site list tbnl-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/tbnl-devel