В ABCL, как я могу выйти из неконтролируемой функции, не убивая LISP?

В ABCL во время разработки я иногда получаю неконтролируемые функции. Я хочу иметь возможность остановить выполнение и вернуться к LISP верхнего уровня, не убивая процесс LISP/JVM (в моей оболочке emacs) и не теряя моей текущей среды 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 batch job (Y/N)? n n

Process inferior-lisp exited abnormally with code 130


person Clark Elliott    schedule 01.06.2019    source источник
comment
NB: я только что увидел ваш вопрос, потому что редко смотрю на тег abcl; у вас будет лучшая экспозиция, если вы также добавите тег common-lisp (или lisp)   -  person coredump    schedule 06.06.2019


Ответы (1)


Вместо этого попробуйте использовать Emacs со Slime, потому что Slime не уничтожает процесс, а прерывает поток и входит в отладчик, если вы нажмете C-c C-c.

Вероятно, вам следует добавить исполняемый скрипт abcl.sh где-нибудь в PATH следующим образом:

#!/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.

person coredump    schedule 06.06.2019