在 ABCL 中,在开发过程中,我有时会遇到失控的函数。我希望能够停止执行并返回到顶层 LISP,而不会终止 LISP/JVM 进程(在我的 emacs shell 中)和丢失我当前的 LISP 环境。
我尝试过各种控制键(例如 Control-C、Control-D 等),但充其量不过是杀死了 LISP 或 JVM。
;;; How to stop this function and return to LISP interactive
;;; without killing lisp...?
(defun runaway ()
(let ((result nil))
(dotimes (count 10 result)
(sleep 2)
(print count))))
<p>C-c C-cTerminate batch job (Y/N)? n
n</p>
Process inferior-lisp exited abnormally with code 130
最佳答案
尝试将 Emacs 与 Slime 结合使用,因为如果您按 C-c C-c,Slime 不会终止进程但会中断线程并进入调试器。
您可能应该在您的 PATH 某处添加一个可执行脚本 abcl.sh
,如下所示:
#!/bin/sh
exec java -jar .../abcl/abcl-bin-1.5.0/abcl.jar
您必须将 ...
替换为您自己的 abcl.jar
路径。
然后,您应该可以从 Emacs 启动它。
执行 C-u M-x slime 以强制 slime
命令提示输入可执行文件,并向其提供 abcl.sh
。它应该启动进程并使用 Slime 协议(protocol)连接到它。
关于lisp - 在 ABCL 中,如何在不终止 LISP 的情况下摆脱失控的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56408489/