[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: debugger restarts
From: |
Andy Wingo |
Subject: |
Re: debugger restarts |
Date: |
Mon, 20 Jun 2016 12:53:16 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
On Fri 05 Feb 2016 10:26, address@hidden (Ludovic Courtès) writes:
> Federico Beffa <address@hidden> skribis:
>
>> I've been playing a little bit with MIT Scheme and have noticed a very
>> nice feature of the debugger: when you hit an error and enter the
>> debugger, it allows you to continue execution of a program with a user
>> supplied value (restarts).
>>
>> Looking for such a feature in Guile I've found this old thread:
>>
>> https://lists.gnu.org/archive/html/guile-user/2011-10/msg00033.html
>>
>> which suggests that it isn't. I'm wondering if something has moved in
>> that direction since then.
>
> Sorry for the laaate reply! Unfortunately no, nothing has been done in
> that direction, but it’d still be a welcome addition!
>
> Currently the behavior of ‘throw’ (in boot-9.scm) is that it always
> aborts to the catch prompt and runs the ‘throw’ handler from there; the
> continuation of the faulty code is not captured, and thus cannot be
> resumed like MIT Scheme’s (restart 2) does:
[...]
> We would need to make this customizable. However, we don’t want to
> systematically reify ‘cont’ here because that would be too costly.
>
> I’m not sure how to approach this. Maybe Andy or Mark know better?
I think in general we should not make a change that would allow any
`throw' to return directly. That would break programs. However
something like:
(define %exits (make-parameter '()))
(define-syntax-rule (with-exits name body ...)
(let/ec exit
(parameterize ((%exits (acons name exit (%exits))))
body ...)))
and the debugger knows to look in %exits for potential exits -- that can
work fine too. Or the debugger can know how to re-call a procedure with
new arguments or something...
Andy
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: debugger restarts,
Andy Wingo <=