[英]Setting up emacs/slime/swank for clojure with leiningen
[英]Stopping infinite loops while running clojure tests in emacs with leiningen and swank/slime
在某些类型的代码中,相对容易在不吹动堆栈的情况下导致无限循环。 使用clojure-test测试这种性质的代码时,有没有办法在不重启swank服务器的情况下中止当前运行的测试?
目前我的工作流程涉及到
$ lein swank
使用slime-connect
swank和emacs,切换到测试,用Cc C-,
执行,测试运行直到无限循环,然后返回但是一个cpu仍然在测试中流失。 我发现阻止这种情况的唯一方法是重新启动lein swank,但似乎这是一个相对常见的问题? 谁有更好的解决方案?
是的,程序员在开发中编写无限循环是一个常见的问题:)。 答案很简单。 它被称为“中断命令”,它是Cc Cb
莱宁根与此毫无关系。 这是SLIME / Swank / Clojure。 在Emacs中评估代码时,您将在Clojure中生成一个新线程。 SLIME保留对这些线程的引用,并显示在Emacs模式行中运行的线程数。 如果您在图形环境中,可以单击指示命名空间的模式行,并查看许多选项。 一个选项是“中断命令”
Eval (while true)
和Cc Cb
获取一个对话框,显示java.lang.ThreadDeath
错误,可能只有一个选项。 您可以键入0
或q
退出该线程,终止该错误消息缓冲区并将焦点返回到先前的缓冲区。
根据这个旧的讨论 ,添加(use 'clojure.contrib.repl-utils))
和(add-break-thread!)
到user.clj应该可以让你按Cc Cc
将SIGINT传递给长时间运行的评估/处理。
如果所有其他方法都失败了... alt-x slime-quit-lisp
并重新启动REPL。 首先尝试Psyllo的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.