【问题标题】:In ABCL how do I break from a runaway function without killing LISP?在 ABCL 中,如何在不杀死 LISP 的情况下摆脱失控函数?
【发布时间】:2019-10-17 21:28:22
【问题描述】:

在 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))))

C-c C-cTerminate 批处理作业 (Y/N)? n n

进程inerious-lisp异常退出,代码为130

【问题讨论】:

  • 注:我刚看到你的问题,因为我很少看abcl标签;如果你也添加“common-lisp”标签(或 lisp),你会有更好的曝光率

标签: lisp common-lisp break control-c abcl


【解决方案1】:

尝试使用带有 Slime 的 Emacs,因为如果按 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 协议连接到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    相关资源
    最近更新 更多