【问题标题】:Evaluating expressions in SLIME while using STEP在使用 STEP 时评估 SLIME 中的表达式
【发布时间】:2013-07-25 15:02:29
【问题描述】:

我将 SLIME 与 SBCL 一起使用。通常在 SBCL 中,我可以执行 (step (call-some-function 1 2 3)) 并且我将能够单步执行/进入/退出每一行代码,以及执行我自己的任意表达式以查看某些变量的当前状态。

但如果我尝试在 SLIME 的 REPL 中做同样的事情,我会得到:

Evaluating call:
  (CP-GET-ALL-PE-MATCHES-ANY-LENGTH SENT-ID)
With arguments:
  581869302


   [Condition of type STEP-FORM-CONDITION]

Restarts:
 0: [STEP-CONTINUE] Resume normal execution
 1: [STEP-OUT] Resume stepping after returning from this function
 2: [STEP-NEXT] Step over call
 3: [STEP-INTO] Step into call
 4: [ABORT] Exit debugger, returning to top level.

Backtrace:
  0: (call-some-function 1 2 3)
  ...

似乎没有任何方法可以获取sent-id 的当前值,或者评估(nth 1 some-list)

真的是这样吗?如果是这样,这是否意味着我必须在终端中启动第二个 SBCL 实例,并像在 SLIME 中一样单步执行该功能才能获得此功能?

【问题讨论】:

  • 我对遇到同样的问题有模糊的记忆,但我不记得我是如何处理它的,如果有的话。如果在函数定义上使用 C-u C-c C-c 而不是 (step ...),会发生同样的事情吗?
  • 嗯...现在不行了 :) 一定是某个贡献的库/我大约一年前使用过的东西,现在已经没有了。无论如何,我脑海中突然出现的另一件事:您是否针对调试进行了优化?我认为默认设置可能会丢失一些调试信息。
  • @wvxvw 感谢您的回复!不幸的是,我已将调试设置为最大 ((sb-ext:restrict-compiler-policy 'debug 3)),但没有任何改变:(
  • 我想我在这里提到了步进器:lists.gnu.org/archive/html/help-gnu-emacs/2007-06/msg00091.html 工作......这很可能因为我不是最新的/在 Debian 上安装了 apt-get(通常落后最后一个版本)。我现在通常做的是在要检查的代码中添加(break "break" foo bar),其中foobar 是我感兴趣的变量。虽然功能性的步进调试器肯定会更好。
  • @wvxvw 好吧,我可以 逐行逐行浏览源代码,但我在执行此操作时似乎根本无法评估任何内容。看来在可预见的未来是不可能的。哇。

标签: debugging common-lisp slime sbcl


【解决方案1】:

你仍然可以在 SLIME 中使用 REPL 在调试器中,我经常这样做,例如发生错误时。你只需要切换到 REPL 缓冲区并输入。它最初不会显示提示,但是一旦你给它一个初始表单它就会显示。

【讨论】:

  • 这对我不起作用,您使用的是什么实现?我正在使用 SBCL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 2022-11-07
  • 1970-01-01
相关资源
最近更新 更多