在某些类型的代码中,相对容易在不吹动堆栈的情况下导致无限循环。使用clojure-test测试这种性质的代码时,有没有办法在不重启swank服务器的情况下中止当前正在运行的测试?
目前我的工作流程涉及
$ lein swank
使用slime-connect
通过emacs连接到swank,然后切换到测试,使用C-c C-,
执行,测试运行直到无限循环,然后返回但是一个cpu仍然在测试中流失。我发现阻止这种情况的唯一方法是重新启动lein swank,但似乎这是一个相对常见的问题?任何人都有更好的解决方案吗?
答案 0 :(得分:13)
是的,程序员在开发中编写无限循环是一个常见的问题:)。答案很简单。它被称为“中断命令”,它是C-c C-b
评估(while true)
和C-c C-b
以获得显示java.lang.ThreadDeath
错误的对话框,可能只有一个选项。您可以键入0
或q
退出该线程,终止该错误消息缓冲区并将焦点返回到之前的缓冲区。
答案 1 :(得分:2)
根据this old discussion,将(use 'clojure.contrib.repl-utils))
和(add-break-thread!)
添加到user.clj应该可以按C-c C-c
将SIGINT传递给长时间运行的评估/处理。
答案 2 :(得分:1)
如果所有其他方法都失败了.. alt-x slime-quit-lisp
并重新启动REPL。首先尝试Psyllo的答案。