我有swin 1.4插件的lein 1.7。然后,我开始没有emacs配置并从橘子酱安装clojure-mode,用lein创建一个新项目,打开project.clj然后做M-x clojure-jack-in。史莱姆开始就好了。然后我进入这个
; SLIME 20100404
user> (defn x[x]
(let [y (* x 2)]
(when (= y 2)
(throw (Exception. "hey")))
y))
#'user/x
user> (x 2)
4
user> (x 1)
它将我引入调试器,但看起来它不完整:
hey
[Thrown class java.lang.Exception]
Restarts:
0: [QUIT] Quit to the SLIME top level
Backtrace:
0: NO_SOURCE_FILE:1 user/x
[No Locals]
1: NO_SOURCE_FILE:1 user/eval1854
[No Locals]
2: Compiler.java:6465 clojure.lang.Compiler.eval
3: Compiler.java:6431 clojure.lang.Compiler.eval
4: core.clj:2795 clojure.core/eval
5: core.clj:532 swank.core/eval690[fn]
6: MultiFn.java:163 clojure.lang.MultiFn.invoke
7: basic.clj:54 swank.commands.basic/eval-region
8: basic.clj:44 swank.commands.basic/eval-region
9: basic.clj:78 swank.commands.basic/eval880[fn]
--more--
未显示当地人。没有选择继续。我查看了视频:http://vimeo.com/23932914如何使用相同的slime / emacs / clojure配置。
答案 0 :(得分:3)
如果我理解正确,你想在异常点看到本地人,但是,我相信你的问题是异常被捕获的地方(在x
函数退出之后)你'已经移出了定义本地人的堆栈框架。
例如,如果设置断点....
user> (defn x [x]
(let [y (* x 2)]
(when (= 2 y)
(swank.core/break)
(throw (Exception. "hey")))))
user> (x 1)
然后当你到达断点并获得堆栈跟踪时,本地人就可以了。
BREAK:
[Thrown class java.lang.Exception]
Restarts:
0: [QUIT] Quit to the SLIME top level
1: [CONTINUE] Continue from breakpoint
Backtrace:
0: NO_SOURCE_FILE:1 user/x
Locals:
x = 1
y = 2
1: NO_SOURCE_FILE:1 user/eval6821
2: Compiler.java:6465 clojure.lang.Compiler.eval
3: Compiler.java:6431 clojure.lang.Compiler.eval
4: core.clj:2795 clojure.core/eval
5: core.clj:532 swank.core/eval819[fn]
6: MultiFn.java:163 clojure.lang.MultiFn.invoke
7: basic.clj:54 swank.commands.basic/eval-region
8: basic.clj:44 swank.commands.basic/eval-region
9: basic.clj:78 swank.commands.basic/eval1009[fn]
--more--
深入了解(swank.core/break)
的源代码,您实际上可以自己捕获这些本地绑定....
(defn x [x]
(let [y (* x 2)]
(when (= 2 y)
(swank.core/local-bindings)
(throw (Exception. "hey")))))
你将从“嘿”异常中得到与上面相同的堆栈跟踪...
更多详情here
答案 1 :(得分:2)
此视频显示了已重命名为ritz的swank-clj。请参阅存储库中有关如何安装和使用它的说明...