Остановка бесконечных циклов при выполнении тестов clojure в emacs с помощью leiningen и swank / slime - PullRequest
12 голосов
/ 25 февраля 2011

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

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

$ lein swank

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

Ответы [ 3 ]

13 голосов
/ 25 февраля 2011

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

Лейнинген не имеет к этому никакого отношения.Это СЛАЙМ / Суонк / Clojure.Когда вы оцениваете код в Emacs, вы создаете новый поток в Clojure.SLIME хранит ссылки на эти потоки и показывает, сколько из них запущено в модельном ряду Emacs.Если вы находитесь в графическом окружении, вы можете щелкнуть по строке мод, где указано ваше пространство имен, и увидеть множество вариантов.Один из вариантов - «Команда прерывания»

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

2 голосов
/ 25 февраля 2011

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

1 голос
/ 25 февраля 2011

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

...