emacs - 史莱姆检查员评估 : how to get bindings in the inspector?

标签 emacs common-lisp slime

长话短说:动机

我的 CL 代码在 SORTMAPCAR 上中断,并出现一些错误,即数字(假设为 25)不是列表。这告诉我传递给它们的数据结构有问题。因此,我将 (BREAK) 放在代码中发生错误的位置之前。它看起来像这样:

(sort
 (progn
  (break)
  (mapcar (lambda (pair)
            (list (car pair) (cdr pair)))
          (hash-table-plist (state-removed state)))
 #'<
 :key #'car)

(为了提供更多背景信息,这里的想法是将哈希表 (STATE-REMOVED STATE) 转换为按键排序的对列表,错误在于,而不是 HASH-TABLE-PLIST 我应该使用HASH-TABLE-ALIST)

一旦代码命中(BREAK),它就会将我发送到调试器。在这个阶段,我可以单步执行代码,但我决定检查 STATE。不幸的是,STATE本身是通过WITH-SLOTS宏从一个对象中获得的,该对象是另一个对象中的槽,整个函数实际上是由生成的来自 sketch 库的 SKETCH 宏...长话短说,要到达 (STATE-REMOVED STATE) 我需要遍历插槽访问层在检查器中。

TL;DR:实际问题

这里有一个问题:现在我想在我正在检查的对象或该对象的插槽上调用HASH-TABLE-PLIST。我如何访问它们中的任何一个(只是为了比较,在 Smalltalk 调试器中我总是可以访问 self 伪变量来获取内容)?有 slime-inspector-eval,但是如何传递没有显式本地绑定(bind)的内容?关于 slime-inspector-eval 的文档没有说太多。

最佳答案

好吧,更多的谷歌搜索实际上回答了这个问题。我希望它对其他人有用。

感谢this blogpost :被检查的对象绑定(bind)到*。此外,检查器 ( slime-inspector-copy-down ) 中的 M-Ret 将对象存储在 * 中的 point 下,因此可以在 REPL 中使用它。

关于emacs - 史莱姆检查员评估 : how to get bindings in the inspector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45691380/

相关文章:

emacs - 使一个键表现为另一个键

emacs - 提供和要求 Emacs Lisp 包子功能(如何)

lisp - 使用 asdf :defsystem and quickproject 定义包的正确方法

opengl - MacOS 上 SLIME 下的 cl-opengl 使 SBCL 崩溃...错误?

Emacs/Spacemacs — 将 SLIME `eval-last-expression-in-repl` (, s e) 重新绑定(bind)到 ctrl-enter

Emacs:仅加载必要的 yasnippets

Emacs:无法打开加载文件,自动完成

stream - 在 Common Lisp 中读取外部程序的二进制输出

lisp - 在 Lisp 中将十进制数转换为八进制数

Emacs 粘液迷你缓冲区接管