【问题标题】:Clojure Slime ConfigurationClojure 粘液配置
【发布时间】:2012-04-15 06:48:24
【问题描述】:

我有 lein 1.7 和 swank 1.4 插件。然后,我从没有 emacs 配置开始,从 marmalade 安装 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。

【问题讨论】:

    标签: emacs clojure slime swank-clojure


    【解决方案1】:

    如果我理解正确,您希望在异常点看到本地人,但是,我相信您的问题是异常被捕获的地方(在 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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-18
        • 2012-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多