![](/img/trans.png)
[英]Clojure, emacs, ritz-swank: `M-x slime-connect` gives error message
[英]A Clojure/Swank `break` exits the enclosing Leiningen process--why?
當我遇到一個真正的意外錯誤時,我正在調試Clojure程序Infocard Workbench:函數中的(swank.core/break)
導致CLI窗口錯誤,即使正在運行的程序(-main)
也會中止執行。 ,由Clojure / Swank REPL調用。 當我注釋掉break語句時,程序運行正常。 為什么我從創建REPL的leiningen進程而不是從SWANK REPL本身中得到錯誤?
如果需要,該程序將使用以下庫:蹺蹺板(Swing UI); Piccolo2D(Swing 2D圖形); Sedna(具有XQuery訪問權限的XML數據庫)。
堆棧跟蹤如下。 以“ GW COMMENT >>>”開頭的行是我添加的注釋行,不屬於跟蹤。
--- BEGIN cli window output ---
generic-sh-d: field-text is
GW COMMENT >>> Here, I'm in the menu handler for a file-open operation (Seesaw)
shortname-hdlr: filename is t
shortname-handler, inside 2nd 'let'
reached display-file-icards
GW COMMENT >>> Here, I'm printing out actual XQueries to the Sedna database.
declare default element namespace 'http://infoml.org/infomlFile'; for $base in doc('t', 'daily')/infomlFile/infoml[position() != 1] return $base/@cardId/string()
unified-load, before
declare default element namespace 'http://infoml.org/infomlFile';
for $base in collection('daily')/infomlFile/infoml[@cardId = 'gw667_110929221548137']
return ($base/data/title/string(), $base/data/content/string(), $base/selectors/tag/string())
GW COMMENT >>> More XQueries; the "AFTER" indicates the query completed w/o crashing
unified-load, AFTER
unified-load, before
declare default element namespace 'http://infoml.org/infomlFile';
for $base in collection('daily')/infomlFile/infoml[@cardId = 'gw667_110929221638791']
return ($base/data/title/string(), $base/data/content/string(), $base/selectors/tag/string())
unified-load, AFTER
GW COMMENT >>> omitted several before/AFTER pairs; all were successful
GW COMMENT >>> Here's the actual error; note the namespace, swank.core.connection
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Var swank.core.connection/*current-connection* is unbound.
at clojure.lang.Var.deref(Var.java:142)
at clojure.lang.Var.get(Var.java:133)
at swank.core$send_to_emacs.invoke(core.clj:76)
at swank.core$sldb_loop.invoke(core.clj:203)
at swank.core$invoke_debugger.invoke(core.clj:214)
at infwb.sedna$display_file_icards.invoke(NO_SOURCE_FILE:1)
at infwb.misc_dialogs$shortname_handler.invoke(misc_dialogs.clj:76)
at infwb.core$make_app$open_h__3812.invoke(core.clj:37)
at seesaw.action$action$fn__386.invoke(action.clj:74)
at seesaw.action.proxy$javax.swing.AbstractAction$0.actionPerformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
unified-load, AFTER
display-file-icards: exited let-bindings
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:389)
at com.apple.laf.ScreenMenuItem.actionPerformed(ScreenMenuItem.java:95)
at java.awt.MenuItem.processActionEvent(MenuItem.java:627)
at java.awt.MenuItem.processEvent(MenuItem.java:586)
at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:337)
at java.awt.MenuComponent.dispatchEvent(MenuComponent.java:325)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:682)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:638)
at java.awt.EventQueue$1.run(EventQueue.java:636)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:652)
at java.awt.EventQueue$2.run(EventQueue.java:650)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:649)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
--- END cli window output ---
這是包含break
語句的函數:
(defn display-file-icards ; NEW API 111002
""
[shortname coll-name layer-name]
(println "reached display-file-icards")
(let [icard-seq (get-file-icards shortname coll-name)
slip-seq (doall (map unified-load icard-seq))]
(println "display-file-icards: exited let-bindings")
(swank.core/break)
(display-seq slip-seq layer-name)))
回顧錯誤消息:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException:
Var swank.core.connection/*current-connection* is unbound.
我看不到*current-connection*
如何與Swank break
消息的執行連接。 我的程序確實有一個叫符*current-connection*
,但它在命名空間infwb.sedna
,這是從我的REPL運行於其中的命名空間,這是不同的infwb.core
。
如果有人需要,我可以發布更多Clojure源代碼。 感謝您抽出寶貴的時間對此進行思考。
並不是我對這是否有幫助有最遙遠的線索,但我確實注意到不推薦使用 swank -clojure,而推薦使用 nrepl。 也許nrepl有效嗎?
我通過melpa存儲庫向emacs添加了對nrepl的支持,並通過Mx nrepl-jack-in
“插入”。
我的.emacs.d / init.el的相關位看起來像(這將在Emacs24及更高版本上工作):
(require 'package)
(setq package-user-dir "~/.emacs.d/elpa/")
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(when (not package-archive-contents)
(package-refresh-contents))
(defvar my-packages '(melpa
exec-path-from-shell
starter-kit
starter-kit-lisp
starter-kit-bindings
ess
clojure-mode
clojure-test-mode
paredit
ac-nrepl
nrepl
auto-complete
ac-nrepl
twilight-theme
auctex)
"A list of packages to ensure are installed at launch.")
(dolist (p my-packages)
(when (not (package-installed-p p))
(package-install p)))
編輯 :糟糕,剛注意到這一年。 我猜這可能不再是您的問題了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.