[slime-devel] Re: OpenMCL

Peter Seibel peter at javamonkey.com
Sat Dec 13 01:58:56 UTC 2003


Luke Gorrie <luke at bluetail.com> writes:

> Peter Seibel <peter at javamonkey.com> writes:
> 
> > Are you planning to make it possible to debug multiple threads
> > simultaneously--I.e. it might be nice to set break points in two
> > places that will be hit be different threads and then debug them both
> > at the same time (in two different debugging buffers); for example
> > step a little way in one thread, then switch to the other; etc.
> 
> Not initially. Is that something you need?

Not initially. ;-)

> This is slightly tricky in SLIME because we support a synchronous
> evaluation interface in Emacs Lisp. In Elisp you can write:
> 
>     (slime-eval '(swank:some-function))
> 
> And it will evaluate the form in Lisp and then return the
> result. However, it might enter the debugger before it finishes, in
> which case Emacs enters a "recursive edit" to do the debugging without
> unwinding the Elisp stack (so that when you finish debugging it can
> return the final result to the `slime-eval' call). If during debugging
> you switched over to another thread and did another `slime-eval'
> there, the stack would end up rather tangled -- you have two
> `slime-eval's on the stack and have to return to one before the other.
>
> A few possible solutions come to mind, but I think it will be better
> to burn this bridge when we come to it and do some experimentation.
> Ideas are always welcome, of course.

Hmmm. I'm pretty ignorant of the details of recursive edits. Which
gives me the advantage of not knowing what's hard. ;-) Here's how I
was envisioning it: when I pick a thread to debug from the list of
debuggable therads SLIME creates a new buffer for interacting with
that thread. I switch between threads by switching between buffers.
Thus I can C-x 2 to split my window and put one thread-buffer in each
window and switch back and forth with C-x o. Peeking at the info page
for recursive edits I see this:

   In general, we try to minimize the use of recursive editing levels
  in GNU Emacs. This is because they constrain you to "go back" in a
  particular order--from the innermost level toward the top level.
  When possible, we present different activities in separate buffers
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  so that you can switch between them as you please.Some commands
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  switch to a new major mode which provides a command to switch back.
  These approaches give you more flexibility to go back to unfinished
  tasks in the order you choose.

I'm not sure I grok all the implications of that underlined portion
but it sort of sounds like if you were following that advice instead
of debugging in a recursive edit you'd debug in a new buffer. Which
you might switch to automatically if you're interacting with the Lisp
synchronously.

-Peter

-- 
Peter Seibel                                      peter at javamonkey.com

         Lisp is the red pill. -- John Fraser, comp.lang.lisp





More information about the slime-devel mailing list