[slime-devel] Re: Question about :DEBUG and :DEBUG-ACTIVATE

Helmut Eller heller at common-lisp.net
Mon Nov 6 09:15:00 UTC 2006

* Brad Beveridge [2006-11-05 21:36+0100] writes:

> At the protocol level, I don't quite see why :DEBUG and
> :DEBUG-ACTIVATE do what they do.
> For a quick recap, Swank sends :DEBUG, and slime calls sldb-setup.
> Swank then sends :DEBUG-ACTIVATE, for that level of debug, Slime sends
> back :DEBUGGER-INFO-FOR-EMACS 0 10.  When that returns sldb-setup is
> called again (with the same info it just got?)

The Swank server does looks something like this:

  (send (:debug <debug-info>) <emacs>)
    (send (:debug-activate <level>) <emacs>)
    (send (eval (receive <emacs>)) <emacs>)) ; recursion possible
  (send (:debug-return <level>) <emacs>)

> So it looks to me like there is some redundancy here, could somebody
> please enlighten me about how :DEBUG and :DEBUG-ACTIVATE work?

The original indent of sending :debug-activate on each iteration was
to simplify the handling of situations like "return from debug level 3
to debug level 2".  I guess it could also be detected with the
:debug-return alone, but not as conveniently (consider switching from
level 4 to level 1).

Also note that Emacs requests :debug-info-for-emacs only if the level
indicated by :debug-activate differs from the level in the current
sldb buffer.  Usually, the :debug message includes enough information
to set up the sldb buffer and :debug-activate will just display the
buffer.  Yes, :debug is redundant, but it saves a round-trip
(i.e. :debug-info-for-emacs message and reply) in the common case, in
which the user presses q shortly after entering the sldb buffer.


More information about the slime-devel mailing list