[slime-devel] SLDB hangs with CLISP/Cygwin

Steven E. Harris seh at panix.com
Sun Mar 13 18:36:51 UTC 2005


I am having trouble expanding frames to see local variables in SLDB
using SLIME in XEmacs 21.4.13 with CLISP 2.33.1 on Cygwin. If I define
a function with a break expression,

  (defun foo (n)
    (break)
    n)

then call that function,

  (foo 1)


SLDB presents the backtrace:

,----
| Break
|    [Condition of type SIMPLE-CONDITION]
| 
| Restarts:
|   0: [CONTINUE] Return from BREAK loop
|   1: [ABORT] Abort handling SLIME request.
| 
| Backtrace:
|   0: frame binding variables (~ = dynamically):
|   | ~ SYSTEM::*FASOUTPUT-STREAM* <--> NIL
|   1: EVAL frame for form (BREAK)
|   2: EVAL frame for form (PROGN (BREAK) N)
|   3: APPLY frame for call (FOO '1)
|   4: EVAL frame for form (FOO 1)
|   5: EVAL frame for form (SWANK:INTERACTIVE-EVAL "(foo 1)")
|   6: EVAL frame for form (SWANK:START-SERVER "/tmp/seh/slime.800" :EXTERNAL-FORMAT :ISO-LATIN-1-UNIX)
`----

Moving the cursor down to, say, the "1:" line and pressing enter to
expand the frame causes XEmacs to hang. The minibuffer reports:

  ; pipelined request... (swank:frame-locals-for-emacs 1)

Interrupting XEmacs with C-g produces the following backtrace:


Debugger entered--Lisp error: (quit)
  accept-process-output(nil 0 10000)
  (while t (accept-process-output nil 0 10000))
  (let ((debug-on-quit t) (inhibit-quit nil)) (while t (accept-process-output nil 0 10000)))
  (catch tag (slime-rex (tag sexp) (sexp package) (... ... ...) (... ...)) (let (... ...) (while t ...)))
  (apply (function funcall) (catch tag (slime-rex ... ... ... ...) (let ... ...)))
  (let* ((tag ...) (slime-stack-eval-tags ...)) (apply (function funcall) (catch tag ... ...)))
  slime-eval((swank:frame-locals-for-emacs 1))
  sldb-frame-locals(1)
  (let* ((i 0) (G43782 ...) (var nil)) (while (consp G43782) (setq var ...) (destructuring-bind ... var ... ...) (setq i ...) (setq G43782 ...)) nil)
  (catch (quote --cl-block-nil--) (let* (... ... ...) (while ... ... ... ... ...) nil))
  (cl-block-wrapper (catch (quote --cl-block-nil--) (let* ... ... nil)))
  (block nil (let* (... ... ...) (while ... ... ... ... ...) nil))
  (loop for i from 0 for var in (sldb-frame-locals frame) do (destructuring-bind (&key name id value) var (slime-propertize-region ... ... ... ...) (insert "\n")))
  sldb-insert-locals(1 "        ")
  (progn (sldb-insert-frame frame t) (insert indent1 (in-sldb-face section "Locals:") "\n") (sldb-insert-locals frame-number indent2) (when sldb-show-catch-tags (let ... ...)) (unless sldb-enable-styled-backtrace (terpri)) (point))
  (prog1 (progn (sldb-insert-frame frame t) (insert indent1 ... "\n") (sldb-insert-locals frame-number indent2) (when sldb-show-catch-tags ...) (unless sldb-enable-styled-backtrace ...) (point)) (add-text-properties G43777 (point) (backquote ...)))
  (let ((G43777 ...)) (prog1 (progn ... ... ... ... ... ...) (add-text-properties G43777 ... ...)))
  (slime-propertize-region (backquote (frame ... details-visible-p t)) (sldb-insert-frame frame t) (insert indent1 (in-sldb-face section "Locals:") "\n") (sldb-insert-locals frame-number indent2) (when sldb-show-catch-tags (let ... ...)) (unless sldb-enable-styled-backtrace (terpri)) (point))
  (let* ((props ...) (frame ...) (frame-number ...) (standard-output ...) (indent1 "      ") (indent2 "        ")) (delete-region start end) (slime-propertize-region (backquote ...) (sldb-insert-frame frame t) (insert indent1 ... "\n") (sldb-insert-locals frame-number indent2) (when sldb-show-catch-tags ...) (unless sldb-enable-styled-backtrace ...) (point)))
  (save-excursion (goto-char start) (let* (... ... ... ... ... ...) (delete-region start end) (slime-propertize-region ... ... ... ... ... ... ...)))
  (let* ((G43776 ...) (start ...) (end ...)) (save-excursion (goto-char start) (let* ... ... ...)))
  (multiple-value-bind (start end) (sldb-frame-region) (save-excursion (goto-char start) (let* ... ... ...)))
  sldb-show-frame-details()
  (if (or on (not ...)) (sldb-show-frame-details) (sldb-hide-frame-details))
  (let ((inhibit-read-only t) (column ...)) (if (or on ...) (sldb-show-frame-details) (sldb-hide-frame-details)) (move-to-column column))
  sldb-toggle-details()
  funcall(sldb-toggle-details)
  (if fn (funcall fn))
  (let ((fn ...)) (if fn (funcall fn)))
  (lambda nil "Invoke the action at point." (interactive) (let (...) (if fn ...)))()
  call-interactively(sldb-default-action)


If I press "c" continue from that backtrace, focus returns to the SLDB
buffer, from which I can still invoke restarts. That is, the Lisp
connection is still alive and synchronized with SLIME.

Recent activity in the *slime-events* buffer is:

,----
| (:emacs-rex
|  (swank:interactive-eval "(foo 1)")
|  nil t 32)
| (:debug 0 1
|         ("Break" "   [Condition of type SIMPLE-CONDITION]" nil nil)
|         (("CONTINUE" "Return from BREAK loop")
|          ("ABORT" "Abort handling SLIME request."))
|         ((0 "frame binding variables (~ = dynamically):\n  | ~ SYSTEM::*FASOUTPUT-STREAM* <--> NIL")
|          (1 "EVAL frame for form (BREAK)")
|          (2 "EVAL frame for form (PROGN (BREAK) N)")
|          (3 "APPLY frame for call (FOO '1)")
|          (4 "EVAL frame for form (FOO 1)")
|          (5 "EVAL frame for form (SWANK:INTERACTIVE-EVAL \"(foo 1)\")")
|          (6 "EVAL frame for form (SWANK:START-SERVER \"/tmp/seh/slime.800\" :EXTERNAL-FORMAT :ISO-LATIN-1-UNIX)"))
|         (32))
| (:debug-activate 0 1)
| (:emacs-rex
|  (swank:frame-locals-for-emacs 1)
|  nil 0 33)
| (:return
|  (:ok
|   ((:name "N" :id 0 :value "1")))
|  33)
`----

-- 
Steven E. Harris




More information about the slime-devel mailing list