【发布时间】: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),其中foo和bar是我感兴趣的变量。虽然功能性的步进调试器肯定会更好。 -
@wvxvw 好吧,我可以 逐行逐行浏览源代码,但我在执行此操作时似乎根本无法评估任何内容。看来在可预见的未来是不可能的。哇。
标签: debugging common-lisp slime sbcl