lisp-maintainers/cl-repl

`ros repl` quits on error

Closed this issue · 3 comments

wyan commented

I've installed cl-repl via roswell as recommended. When I run ros repl and type in some code that throws an error, I immediately get a stack trace followed by the message unhandled condition in --disable-debugger mode, quitting, and the session ends.

For reference, this is the type of stack trace I mean:

CL-USER> (compile nil)
Unhandled UNDEFINED-FUNCTION in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                          {7005930003}>:
  The function COMMON-LISP:NIL is undefined.

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {7005930003}>
0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<UNDEFINED-FUNCTION NIL {7007B3AEF3}> #<unused argument> :QUIT T)
1: (SB-DEBUG::RUN-HOOK *INVOKE-DEBUGGER-HOOK* #<UNDEFINED-FUNCTION NIL {7007B3AEF3}>)
2: (INVOKE-DEBUGGER #<UNDEFINED-FUNCTION NIL {7007B3AEF3}>)
3: (ERROR UNDEFINED-FUNCTION :NAME NIL)
4: (SB-KERNEL:%COERCE-NAME-TO-FUN NIL)
5: (FDEFINITION NIL)
6: (COMPILE NIL) [optional]
7: (SB-INT:SIMPLE-EVAL-IN-LEXENV (COMPILE NIL) #<NULL-LEXENV>)
8: (EVAL (COMPILE NIL))
9: (CL-REPL::EVAL-PRINT (COMPILE NIL))
10: (CL-REPL::READ-EVAL-PRINT :LEVEL 0)
11: (CL-REPL::REPL)
12: (CL-REPL:MAIN NIL :SHOW-LOGO NIL)
13: (SB-INT:SIMPLE-EVAL-IN-LEXENV (APPLY (QUOTE ROS.SCRIPT.ROS-REPL.3724301531::MAIN) ROSWELL:*ARGV*) #<NULL-LEXENV>)
14: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:QUIT (APPLY (QUOTE ROS.SCRIPT.ROS-REPL.3724301531::MAIN) ROSWELL:*ARGV*)) #<NULL-LEXENV>)
15: (EVAL-TLF (ROSWELL:QUIT (APPLY (QUOTE ROS.SCRIPT.ROS-REPL.3724301531::MAIN) ROSWELL:*ARGV*)) NIL NIL)
16: ((LABELS SB-FASL::EVAL-FORM :IN SB-INT:LOAD-AS-SOURCE) (ROSWELL:QUIT (APPLY (QUOTE ROS.SCRIPT.ROS-REPL.3724301531::MAIN) ROSWELL:*ARGV*)) NIL)
17: (SB-INT:LOAD-AS-SOURCE #<CONCATENATED-STREAM :STREAMS NIL {7005920363}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading")
18: ((LABELS SB-FASL::LOAD-STREAM-1 :IN LOAD) #<CONCATENATED-STREAM :STREAMS NIL {7005920363}> NIL)
19: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<FUNCTION (LABELS SB-FASL::LOAD-STREAM-1 :IN LOAD) {102E30B4B}> #<CONCATENATED-STREAM :STREAMS NIL {7005920363}> NIL #<CONCATENATED-STREAM :STREAMS NIL {7005920363}>)
20: (LOAD #<CONCATENATED-STREAM :STREAMS NIL {7005920363}> :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST :ERROR :EXTERNAL-FORMAT :DEFAULT)
21: ((FLET ROSWELL::BODY :IN ROSWELL:SCRIPT) #<SB-SYS:FD-STREAM for "file /Users/alice/.roswell/bin/ros-repl" {7005920083}>)
22: (ROSWELL:SCRIPT "/Users/alice/.roswell/bin/ros-repl")
23: (ROSWELL:RUN ((:EVAL "(ros:quicklisp)") (:SCRIPT "/Users/alice/.roswell/bin/ros-repl") (:QUIT NIL)))
24: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:RUN (QUOTE ((:EVAL "(ros:quicklisp)") (:SCRIPT "/Users/alice/.roswell/bin/ros-repl") (:QUIT NIL)))) #<NULL-LEXENV>)
25: (EVAL (ROSWELL:RUN (QUOTE ((:EVAL "(ros:quicklisp)") (:SCRIPT "/Users/alice/.roswell/bin/ros-repl") (:QUIT NIL)))))
26: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:EVAL . "(progn #-ros.init(cl:load \"/opt/homebrew/Cellar/roswell/23.10.14.114/etc/roswell/init.lisp\"))") (:EVAL . "(ros:run '((:eval\"(ros:quicklisp)\")(:script \"/Users/alice/.roswell/bin/ros-repl\")(:quit ())))")))
27: (SB-IMPL::TOPLEVEL-INIT)
28: ((FLET SB-UNIX::BODY :IN SB-IMPL::START-LISP))
29: ((FLET "WITHOUT-INTERRUPTS-BODY-3" :IN SB-IMPL::START-LISP))
30: (SB-IMPL::%START-LISP)

unhandled condition in --disable-debugger mode, quitting

I'm on an M1 laptop running macOS Sonoma 14.2.1, and Roswell is installing SBCL 2.4.1

Is there a way to enable the debugger so that I don't have to restart the REPL everytime I make a mistake?

Thanks for reporting! I can confirm this error on linux too. However, the issue should not happen if you start using ros run and then (cl-repl:main).

I'm not very familiar with ros, so I cannot point to where this error stems from. It seems related to the --script option of SBCL which disables the debugger. SBCL provides both (sb-ext:disable-debugger) and (sb-ext:enable-debugger) to do this programmatically.

In b27db9e, I am now calling (sb-ext:enable-debugger) so that the debugger is enabled even within the ros script.

wyan commented

Thank you, this indeed solves the issue!

This has been fixed in v0.7.0.