我正在寻找更好的技术来做到这一点。我的一般困难是调试器进入得太晚或太早,无法捕获变量的值。
我首先尝试的是:
(loop for i from 0 to 10 do
  (break))
当调试器进入中断状态时,我无法访问i:( 所以这是浪费精力。我尝试过e调试器选项(在框架中评估),但 SLIME 通常只是出错,我必须重新连接到 SWANK。v或者t不'没有帮助,因为变量只是“不存在”。
我最终做了什么:
(loop for i from 0 to 10 do
  (signal i))
这很愚蠢,但是有效,因为它放在i我可以在调试器中检查的帧的堆栈上。但这只是……嗯,这是最糟糕的意义上的黑客行为。是否有某种方法可以“监视”变量,或者有更有意义的方法来放置断点,以便我可以在输入断点的地方看到更多变量?
你的第一个片段对我来说用 CCL 工作得很好(默认optimize你的第一个片段对我来说使用 CCL(默认设置)、Emacs 24 和最近拉出的 Slime
Break\n   [Condition of type SIMPLE-CONDITION]\n\nRestarts:\n 0: [CONTINUE] Return from BREAK.\n 1: [RETRY] Retry SLIME REPL evaluation request.\n 2: [*ABORT] Return to SLIME\'s top level.\n 3: [ABORT-BREAK] Reset this thread\n 4: [ABORT] Kill this thread\n\nBacktrace:\n  0: (#<Anonymous Function #x186F9B7E>)\n      Locals:\n        I = 0\n  1: (CCL::CHEAP-EVAL (LOOP FOR I FROM 0 TO 10 DO (BREAK)))\n\n\xe2\x8b\xae\nsldb-eval-in-frame对我来说也很好用。也许你应该尝试不同的 Lisp 实现或不同版本的 Slime。
另请注意,optimize此处不同的设置可能很重要,并且某些实现可为解释代码提供更好的调试结果(如果解释器可用)。尝试类似的东西(declaim (optimize (debug 3) (speed 0) (space 0)))。
| 归档时间: | 
 | 
| 查看次数: | 1030 次 | 
| 最近记录: |