繁体   English   中英

在使用leiningen和swank / slime的emacs中运行clojure测试时停止无限循环

[英]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错误,可能只有一个选项。 您可以键入0q退出该线程,终止该错误消息缓冲区并将焦点返回到先前的缓冲区。

根据这个旧的讨论 ,添加(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM