3

我有 lein 1.7 和 swank 1.4 插件。然后,我从没有配置 emacs 开始,从 marmalade 安装 clojure-mode,用 lein 创建一个新项目,打开 project.clj,然后执行 Mx 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 配置。

4

2 回答 2

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")))))

您将从“嘿”异常中获得与上述相同的堆栈跟踪...

更多细节在这里

于 2012-04-15T09:33:06.863 回答
2

该视频显示了 swank-clj,它已重命名为ritz。请参阅存储库中有关如何安装和使用它的说明...

于 2012-04-15T09:13:16.193 回答