长话短说:动机
我的 CL 代码在 SORT
或 MAPCAR
上中断,并出现一些错误,即数字(假设为 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/