[plt-scheme] Exception handling outside of Dr Scheme
At Wed, 30 Jan 2008 06:21:14 -0800, "Vincent Rayappa" wrote:
> Hello,
>
> If I am using PLT Scheme outside of Dr. Scheme (via the Unix shebang
> notation), how do I get stack traces from a 'handled exception'?
>
> For example:
>
> (define (handle-error-p exn) #t)
>
> (define (exception-handler exn)
> (printf "Exception caught: ~a ~n" exn)
> ;; --- How can I print the stack trace here inside the handler?
> (do-clean-up))
>
> (with-handlers
> ((handle-error-p exception-handler))
> (do-something ...)))
>
> ---
>
> How would I get the stack track inside exception-handler?
One way is to use the current error display handler to print the
exception, including the trace:
(define (exception-handler exn)
(printf "Exception caught:~n")
((error-display-handler) (exn-message exn) exn)
(do-clean-up))
If you want to print the trace manually, you can extract it with
`continuation-mark-set->context' on the `continuation-marks' field of
the exception:
(define (exception-handler exn)
(printf "Exception caught: ~a\n~s\n"
exn
(continuation-mark-set->context (exn-continuation-marks exn)))
(do-clean-up))
Matthew