Revision: 4603 Author: hans URL: http://bknr.net/trac/changeset/4603
Revive *SHOW-LISP-BACKTRACES-P*
U trunk/thirdparty/hunchentoot/acceptor.lisp U trunk/thirdparty/hunchentoot/doc/index.xml U trunk/thirdparty/hunchentoot/request.lisp U trunk/thirdparty/hunchentoot/specials.lisp
Modified: trunk/thirdparty/hunchentoot/acceptor.lisp =================================================================== --- trunk/thirdparty/hunchentoot/acceptor.lisp 2010-08-29 06:20:07 UTC (rev 4602) +++ trunk/thirdparty/hunchentoot/acceptor.lisp 2010-08-29 06:53:27 UTC (rev 4603) @@ -448,7 +448,7 @@ (when *headers-sent* (setq *close-hunchentoot-stream* t)) (throw 'handler-done - (values nil cond)))) + (values nil cond (and *show-lisp-backtraces-p* (get-backtrace)))))) (warning (lambda (cond) (when *log-lisp-warnings-p*
Modified: trunk/thirdparty/hunchentoot/doc/index.xml =================================================================== --- trunk/thirdparty/hunchentoot/doc/index.xml 2010-08-29 06:20:07 UTC (rev 4602) +++ trunk/thirdparty/hunchentoot/doc/index.xml 2010-08-29 06:53:27 UTC (rev 4603) @@ -2683,6 +2683,12 @@ </clix:description> </clix:special-variable>
+ <clix:special-variable name='*show-lisp-backtraces-p*'> + clix:descriptionWhether Lisp backtraces should be shown in HTML output if + clix:ref*SHOW-LISP-ERRORS-P*</clix:ref> is true and an error occurs. + </clix:description> + </clix:special-variable> + <clix:special-variable name='*approved-return-codes*'> clix:descriptionA list of return codes the server should <em>not</em> treat as an error - see clix:ref*HANDLE-HTTP-ERRORS-P*</clix:ref>. @@ -3036,6 +3042,22 @@
</clix:chapter>
+ <clix:chapter name="debugging" title="Debugging"> + By default, Hunchentoot intercepts all errors that occur while + executing request handlers, logs them to the log file and displays + a static error page to the user. While developing applications, + you may want to change that behavior so that the debugger is + invoked when an error occurs. You can set + the clix:ref*CATCH-ERRORS-P*</clix:ref> to <code>NIL</code> to + make that happen. Alternatively, you may want to have Hunchentoot + display detailed error information in the error response page. + You can set the clix:ref*SHOW-LISP-ERRORS-P*</clix:ref> to a + true value to make that happen. If you don't want to see Lisp + backtraces in these error pages, you can + set clix:ref*SHOW-LISP-BACKTRACES-P*</clix:ref> + to <code>NIL</code>. + </clix:chapter> + <clix:chapter name="history" title="History">
Hunchentoot's predecessor <a href="http://weitz.de/tbnl/">TBNL</a>
Modified: trunk/thirdparty/hunchentoot/request.lisp =================================================================== --- trunk/thirdparty/hunchentoot/request.lisp 2010-08-29 06:20:07 UTC (rev 4602) +++ trunk/thirdparty/hunchentoot/request.lisp 2010-08-29 06:53:27 UTC (rev 4603) @@ -216,7 +216,7 @@ (unwind-protect (with-mapped-conditions () (let* ((*request* request)) - (multiple-value-bind (body error) + (multiple-value-bind (body error backtrace) ;; skip dispatch if bad request (when (eql (return-code *reply*) +http-ok+) (catch 'handler-done @@ -224,9 +224,13 @@ (when error (setf (return-code *reply*) +http-internal-server-error+)) + (format t "show-error ~A show-backtrace ~A error ~A backtrace: ~A~%" + *show-lisp-errors-p* *show-lisp-backtraces-p* error backtrace) (start-output :content (cond ((and error *show-lisp-errors-p*) - (format nil "<pre>~A</pre>" - (escape-for-html (format nil "~A" error)))) + (format nil "<pre>~A~@[~%~%Backtrace:~A~]</pre>" + (escape-for-html (format nil "~A" error)) + (when *show-lisp-backtraces-p* + (escape-for-html (format nil "~A" backtrace))))) (error "An error has occured.") (t body))))))
Modified: trunk/thirdparty/hunchentoot/specials.lisp =================================================================== --- trunk/thirdparty/hunchentoot/specials.lisp 2010-08-29 06:20:07 UTC (rev 4602) +++ trunk/thirdparty/hunchentoot/specials.lisp 2010-08-29 06:53:27 UTC (rev 4603) @@ -196,6 +196,9 @@ (defvar *show-lisp-errors-p* nil "Whether Lisp errors in request handlers should be shown in HTML output.")
+(defvar *show-lisp-backtraces-p* t + "Whether Lisp errors shown in HTML output should contain backtrace information.") + (defvar *log-lisp-errors-p* t "Whether Lisp errors in request handlers should be logged.")