Thanks!
Here's what I came up with that seems to work:
(defvar *devel-mode* nil)
(defun devel-mode-handler (condition) (when *devel-mode* (throw 'page-handler-done (format nil "<h1>Error</h1>~%~A<br>~%<pre>~%~A~%<pre>~%" condition (html-escape (tbnl::get-backtrace))))))
(defmacro defpage (url &body body) ... (catch 'page-handler-done (handler-bind ((error 'devel-mode-handler)) (html :page ,@body)))))))
rg
On Aug 28, 2010, at 4:29 AM, Leslie P. Polzer wrote:
Ron Garret wrote:
Is there any straightforward way to get a backtrace-on-error displayed on the browser screen instead of being logged to a file, like Pythons' cgitb package does? I tried this:
(defun error-handler (arg) [code-to-generate-backtrace])
(setf *HTTP-ERROR-HANDLER* 'error-handler)
but that doesn't work because by the time error-handler is called the server has already exited the error context.
Here's what we're using in Weblocks:
http://bitbucket.org/S11001001/weblocks-dev/src/tip/src/request-handler.lisp... http://bitbucket.org/S11001001/weblocks-dev/src/tip/src/error-handler.lisp#c...
HTH,
Leslie
tbnl-devel site list tbnl-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/tbnl-devel