【发布时间】:2017-02-16 18:26:16
【问题描述】:
Cider debug instructions 告诉我,我可以在调试时按 e 来评估某些内容。这在底部的 Emacs 迷你缓冲区中给了我一点单行空间。
有没有办法在中间切换到完整的 REPL 调试功能,可以访问所有本地人等?目前 REPL 在调试时被挂起/冻结。我在想什么 PyCharm 或 Matlab 如何在处理某事时允许完整的 REPL。
【问题讨论】:
Cider debug instructions 告诉我,我可以在调试时按 e 来评估某些内容。这在底部的 Emacs 迷你缓冲区中给了我一点单行空间。
有没有办法在中间切换到完整的 REPL 调试功能,可以访问所有本地人等?目前 REPL 在调试时被挂起/冻结。我在想什么 PyCharm 或 Matlab 如何在处理某事时允许完整的 REPL。
【问题讨论】:
在调试过程中,插入的 REPL 似乎是绑定的。
但是调试器提供了一些选项,可能
给你几乎和你从 REPL 中得到的一样多的东西。一个方便的是
inject 为您即将产生的结果添加一个新值。
因此,您实际上是在动态更改数据。
您可以使用l 检查本地变量的完整列表。然后查看更多
关于带有 inspect 的 var 并指定哪个。
您也可以eval 输入一个任意表达式,就像
你会在 REPL 中(正如你所提到的)。这似乎是一个
单行全REPL,有历史、编辑等有什么
你想在 REPL 中做你不能用 e 做的事情或发现
l 或 p?
【讨论】:
我发现真正令人沮丧的一件事是,当调试器在所述函数处停止时,我无法编辑函数,然后编辑它并使用初始参数重新运行它。在苹果酒中,如果您尝试编辑正在调试的函数,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 更好的方法。
【讨论】: