12

特定の種類のコードでは、スタックを壊さずに無限ループを発生させるのは比較的簡単です。clojure-testを使用してこの種のコードをテストする場合、swankサーバーを再起動せずに現在実行中のテストを中止する方法はありますか?

現在、私のワークフローには

$ lein swank

を使用してemacsでswankに接続しslime-connect、テストに切り替えて、で実行しC-c C-,、テストを無限ループまで実行してから、戻るだけですが、1つのCPUがまだテストで離れています。私が見つけたこれを止める唯一の方法は、lein swankを再起動することですが、これは比較的一般的な問題のように思われますか?誰かがより良い解決策を持っていますか?

4

3 に答える 3

13

はい、プログラマーが開発中に無限ループを書くことはよくある問題です:)。そして答えはとてもシンプルです。それは「割り込みコマンド」と呼ばれ、C-c C-b

ライニンゲンはこれとは何の関係もありません。これは SLIME/Swank/Clojure です。Emacs でコードを評価すると、Clojure 内で新しいスレッドが生成されます。SLIME はこれらのスレッドを参照し続け、Emacs モードラインで実行されているスレッドの数を表示します。グラフィカル環境を使用している場合は、名前空間を示すモードラインをクリックすると、多くのオプションが表示されます。1 つのオプションは「割り込みコマンド」です。

Eval(while true)と、おそらく 1 つのオプションだけでエラーをC-c C-b示すダイアログを取得します。java.lang.ThreadDeath入力する0q、そのスレッドを終了し、そのエラー メッセージ バッファーを強制終了して、フォーカスを前のバッファーに戻すことができます。

于 2011-02-25T15:58:49.310 に答える
2

この古い議論に従って、user.clj に(use 'clojure.contrib.repl-utils))andを追加すると、長時間実行される評価/プロセスに SIGINT を渡す(add-break-thread!)ように押すことができるはずです。C-c C-c

于 2011-02-25T11:34:08.443 に答える
1

他のすべてが失敗した場合..alt-x slime-quit-lispそしてREPLを再起動します。もちろん、最初にサイロの答えを試してください。

于 2011-02-25T19:45:19.837 に答える