Thank you. This worked very well. Could you explain why you used
(defmacro my-ignore-errors (() &body body)
instead of
(defmacro my-ignore-errors (&body body).
Also is it possible to catch or suppress the compiler warnings. As in
(let (foobar) ())
In: LET (FOOBAR)
(LET (FOOBAR)
NIL)
Note: Variable FOOBAR defined but never used.
Thank you,
William
>
> Quoting William Conrad Halliburton ([EMAIL PROTECTED]):
>> 2. Using ignore-errors around multiple lisp processes. On error I
>> output
>
> Around multiple lisp processes?
>
>> the error message to a log file. I wish to also output a backtrace.
>> How can I print a backtrace from the returned condition?
>
> Try something along these lines:
>
> (defmacro my-ignore-errors (() &body body)
>
> "Like IGNORE-ERRORS, but in case of failure, return backtrace string
> as
> third value."
>
> `(block %debug-escape
>
> (handler-bind
>
> ((error (lambda (c)
>
> (let ((backtrace
>
> (with-output-to-string (*debug-io*)
>
> (debug:backtrace))))
>
> (return-from %debug-escape
>
> (values nil c backtrace))))))
>
> ,@body)))
>
> (As a bit of unsolicited advice, specific handlers are normally
> preferred over IGNORE-ERRORS, but for logging in servers a `catch-all'
> error handler can make sense. However, macros like this one should
> normally check for a global variable at run-time, thus allowing the user
> to turn error handling off while debugging without having to
> re-compile.)