Debugging 使用STEP时计算SLIME中的表达式
我正在使用含有SBCL的粘液。通常在SBCL中,我可以执行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
(步骤(调用某些函数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。