史莱姆检查器:如何在检查器中获取绑定?



长话短说:动机

我有一个 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-ALIST而不是HASH-TABLE-PLIST(

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

TL;DR:实际问题

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

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

感谢这篇博文:被检查的对象必然*。此外,检查器中的M-Ret(slime-inspector-copy-down( 将对象存储在*中的点下,以便可以在 REPL 中使用。

最新更新