emacs - 在 Slime 调试器中检查局部变量的值?

标签 emacs common-lisp slime

我正在寻找一种更好的技术来做到这一点。我的普遍问题是调试器进入太晚或太早而无法捕获变量的值。

我首先尝试的是:

(loop for i from 0 to 10 do
  (break))

当调试器进入中断时,我无法访问 i :( 所以这是白费力气。我试过 e 调试器选项(框架中的 eval),但 SLIME 通常只是出问题,我必须重新连接到 SWANK。vt 没有帮助,因为变量只是“不存在”。

我最终做了什么:
(loop for i from 0 to 10 do
  (signal i))

这是愚蠢的,但有效,因为它把 i在帧的堆栈上,我可以在调试器中检查。但这只是......好吧,从最糟糕的意义上说,这是一种骇人听闻的做法。有没有办法“观察”一个变量,或者有一种更有意义的方式来放置断点,这样我就可以在输入断点的地方看到更多的变量?

最佳答案

你的第一个片段对我来说很好用 CCL(默认 optimize 设置)、Emacs 24 和最近拉出的 Slime:

Break
   [Condition of type SIMPLE-CONDITION]

Restarts:
 0: [CONTINUE] Return from BREAK.
 1: [RETRY] Retry SLIME REPL evaluation request.
 2: [*ABORT] Return to SLIME's top level.
 3: [ABORT-BREAK] Reset this thread
 4: [ABORT] Kill this thread

Backtrace:
  0: (#<Anonymous Function #x186F9B7E>)
      Locals:
        I = 0
  1: (CCL::CHEAP-EVAL (LOOP FOR I FROM 0 TO 10 DO (BREAK)))

⋮
sldb-eval-in-frame对我来说也很好用。也许您应该尝试不同的 Lisp 实现或不同版本的 Slime。

另外,请注意不同的 optimize 设置在这里可能很重要,并且一些实现为解释代码提供了更好的调试结果(如果解释器可用,那就是)。尝试类似 (declaim (optimize (debug 3) (speed 0) (space 0))) .

关于emacs - 在 Slime 调试器中检查局部变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13772246/

相关文章:

emacs - 文档 View 并排显示页面

emacs 组织模式到投影仪 : how to do multicolumn text

macros - 发现 Common Lisp 的 "Core"实体和宏

emacs - 将 s 表达式包裹在 slime 中 (emacs)

javascript - 为什么 swank-js 在 emacs REPL 中给我 "document is not defined"?

emacs - 防止SLIME切换到repl缓冲区

java - JDEE 值得使用吗?

c++ - 在 c++ 模式下更改 emacs 上 'case' 关键字中的选项卡计数

performance - 通用 Lisp 类型说明符

common-lisp - LISP 文件 I/O - 提取和转换信息