[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