Подтвердить что ты не робот

Остановка бесконечных циклов при работе clojure тестов в emacs с leiningen и swank/slime

В некоторых типах кода относительно легко вызвать бесконечный цикл, не продувая стек. При тестировании такого кода с использованием clojure -test существует ли способ прервать текущие текущие тесты без перезапуска сервера swank?

В настоящее время мой рабочий процесс включает

$ lein swank

Подключитесь к swank с помощью emacs с помощью slime-connect и переключитесь на тесты, выполните с помощью C-c C-,, тесты прогоните до бесконечного цикла, а затем просто вернитесь, но один процессор все еще отталкивается от теста. Единственный способ остановить это, я нашел, это перезапустить лейн, но похоже, что это была бы относительно общая проблема? У кого-то есть лучшее решение?

4b9b3361

Ответ 1

Да, для программистов очень часто писать бесконечные петли в разработке:). И ответ очень прост. Он называется "команда прерывания", и это C-c C-b

Leiningen не имеет к этому никакого отношения. Это SLIME/Swank/ Clojure. Когда вы оцениваете код в Emacs, вы создаете новый поток в Clojure. SLIME сохраняет ссылки на эти потоки и показывает, сколько из них работает в модели Emacs. Если вы находитесь в графической среде, вы можете щелкнуть моделью, где она указывает ваше пространство имен и увидеть множество опций. Один из вариантов - "Команда прерывания"

Eval (while true) и C-c C-b, чтобы получить диалоговое окно с сообщением об ошибке java.lang.ThreadDeath, возможно, с одним вариантом. Вы можете ввести 0 или q, чтобы выйти из этого потока, убить этот буфер сообщений об ошибках и вернуть фокус в свой предыдущий буфер.

Ответ 2

По эта старая дискуссия, добавив (use 'clojure.contrib.repl-utils)) и (add-break-thread!) в user.clj, чтобы вы могли нажать C-c C-c для передачи SIGINT для долгосрочной оценки/процесса.

Ответ 3

если все остальное не выполнено. alt-x slime-quit-lisp и перезапустите REPL. попробуйте Psyllo ответить сначала, конечно.