【问题标题】:Cider debug -- how to evaluate stuff while debugging苹果酒调试——如何在调试时评估东西
【发布时间】:2017-02-16 18:26:16
【问题描述】:

Cider debug instructions 告诉我,我可以在调试时按 e 来评估某些内容。这在底部的 Emacs 迷你缓冲区中给了我一点单行空间。

有没有办法在中间切换到完整的 REPL 调试功能,可以访问所有本地人等?目前 REPL 在调试时被挂起/冻结。我在想什么 PyCharm 或 Matlab 如何在处理某事时允许完整的 REPL。

【问题讨论】:

    标签: clojure cider


    【解决方案1】:

    在调试过程中,插入的 REPL 似乎是绑定的。 但是调试器提供了一些选项,可能 给你几乎和你从 REPL 中得到的一样多的东西。一个方便的是 inject 为您即将产生的结果添加一个新值。 因此,您实际上是在动态更改数据。

    您可以使用l 检查本地变量的完整列表。然后查看更多 关于带有 inspect 的 var 并指定哪个。

    您也可以eval 输入一个任意表达式,就像 你会在 REPL 中(正如你所提到的)。这似乎是一个 单行全REPL,有历史、编辑等有什么 你想在 REPL 中做你不能用 e 做的事情或发现 lp?

    【讨论】:

      【解决方案2】:

      我发现真正令人沮丧的一件事是,当调试器在所述函数处停止时,我无法编辑函数,然后编辑它并使用初始参数重新运行它。在苹果酒中,如果您尝试编辑正在调试的函数,emacs 将使用原始代码在新缓冲区中打开调试器。或者,您可以使用 e 命令评估 minibuffer 中的内容,我认为这不是一个很好的体验。我最接近的如下:

      假设你有一些崩溃的函数,你需要调试:

      (defn some-fn 
        [complex-data more-data]
        ; block of code with some bug
      )
      

      我将在命名空间中创建原子并在给定函数中设置值:

      (def c (atom nil))
      (def d (atom nil))
      
      (defn some-fn 
        [complex-data more-data]
        (reset! c complex-data)
        (reset! d more-data)
        ; block of code with some bug
      )
      

      然后我将使用我现在在命名空间中可用的 args 对 some-fn 进行迭代。

      (some-fn @c @d)
      

      我认为这是一种比使用 eval 命令和 cider 调试器中的 minibuffer 更好的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多