Debugging 使用STEP时计算SLIME中的表达式

Debugging 使用STEP时计算SLIME中的表达式,debugging,common-lisp,slime,sbcl,Debugging,Common Lisp,Slime,Sbcl,我正在使用含有SBCL的粘液。通常在SBCL中,我可以执行(步骤(调用某些函数1 2 3)),并且我将能够单步执行每行代码,以及执行我自己的任意表达式,以查看某些变量的当前状态 但如果我尝试在REPL in SLIME中执行相同操作,我会得到: Evaluating call: (CP-GET-ALL-PE-MATCHES-ANY-LENGTH SENT-ID) With arguments: 581869302 [Condition of type STEP-FORM-CON

我正在使用含有SBCL的粘液。通常在SBCL中,我可以执行
(步骤(调用某些函数1 2 3))
,并且我将能够单步执行每行代码,以及执行我自己的任意表达式,以查看某些变量的当前状态

但如果我尝试在REPL in SLIME中执行相同操作,我会得到:

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)
  ...
似乎没有任何方法可以获取
发送id的当前值,或者评估
(第n个列表)


事实上是这样吗?如果是这样的话,这是否意味着我必须在终端中启动第二个SBCL实例,并在SLIME中同时单步执行该函数以获得该功能?

如果将REPL置于调试器中,您仍然可以使用SLIME中的REPL,我通常会这样做,例如,当出现错误时。您只需切换到REPL缓冲区并键入。最初它不会显示提示,但一旦你给它一个初始形式,它就会显示。

我对同样的问题有模糊的记忆,但我不记得我是如何处理它的,如果有的话。如果在函数定义上不使用
(步骤…
,而使用
C-u C-C C-C
,是否会发生同样的情况?嗯。。。现在不行了:)一定是我一年前用过的图书馆,现在已经没有了。不管怎么说,我脑海中闪现的另一件事是:你优化了调试吗?我认为默认设置可能会丢失一些调试信息。@wvxvw感谢您的回复!不幸的是,我已经将debug设置为max(
(sb ext:restrict compiler policy'debug 3)
),但什么都没有改变:(我想我不知怎么地在这里提到了stepper:正在工作……这是很有可能的,因为我没有非常及时地安装apt-get-on-Debian(通常远远落后于最新版本).我现在通常做的是放一个
(break“break”foo bar)
在我要检查的代码中,
foo
bar
是我感兴趣的变量。虽然运行step debugger肯定会更好。@wvxvw好吧,我可以一次一行地逐行检查源代码,但我在执行时似乎根本无法评估任何内容。似乎这对我来说是不可能的可预见的未来。啊。这对我不起作用,你在用什么实现?我在用SBCL。