← Архив: Common Lisp

Как прервать бесконечный цикл?

Author: · 25.02.2011 11:30
· original author: Paul.Alkhimov
Вопрос не совсем по лиспу, конечно, но всё-же:
как в emacs+slime+sbcl прервать неправильный/бесконечный цикл или вычисление?
Я придумал только закрывать *inferior-lisp* и стартовать его снова командой slime.
Можно как-то проще?
Вроде бы получалось несколько раз С-с С-с, но, видимо, это работает только на пользовательском вводе, потому что на чисто бесконечном цикле не помогло.
· original author: Paul.Alkhimov
На всякий случай добавлю, что менюшная команда C-c C-c (и из SLIME, и из REPL) не помогли. На слаймовскую только сказало:
; pipelined request... (swank:listener-eval "
· original author: archimag
Если в SLIME активен  селектор(global-set-key "\C-cs" 'slime-selector)
То комбинация "C-c s t" показывает буфер со списком потоков. Другой вариант - команда slime-list-threads. Нажав "d" на нужном потоке можно начать его оладку, увидеть состояние, стэк вызовов и убить при необходимости. Или просто "k" в буфере потоков убивает выбранный поток. Если убить поток с REPL, то SLIME создаст новый, чистый. В общем, это самый общий путь для борьбы с "зависаниями" в произвольных потоках.
· original author: allchemist
Это очень странно, но у меня C-c C-c работает в 100& случаев. Вероятно, надо жать аккуратнее :)
· original author: dmitry_vk
C-c в SBCL (так же, как и sb-thread:interrupt-thread) посылает нити сигнал SIGHUP. Если по какой-либо причине сигнал не доставляется нити (например, сигнал SIGHUP замаскирован в маске сигналов нити), то прерывания не произойдет. Это может быть по разным причинам - например, блок кода внутри without-interrupts. Еще, например, Gtk+ страдает такой фигней, как изменение обработчиков сигналов, из-за чего после загрузки cl-gtk2 (до одной из недавних версий) C-c переставал работать.
Причин может быть много; надо уточнять, что именно вы делаете.
· original author: Paul.Alkhimov
Я делал
(do ()(nil))
именно с целью посмотреть, как прерывать бесконечные циклы перед тем, как я попытаюсь исполнить реальный код, в котором я не уверен.
· original author: allchemist
Под виндами?
· original author: Paul.Alkhimov
Под ними самыми. XP.