Common lisp SBCL错误消息

Common lisp SBCL错误消息,common-lisp,Common Lisp,当我使用SBCL(我最喜欢的实现)时,我经常在REPL中看到这种错误消息 CL-USER> (vgplot:fred) ; Evaluation aborted on #<SB-INT:SIMPLE-READER-PACKAGE-ERROR "Symbol ~S not found in the ~A package." {1004289123}>. CL-USER> CL-USER>(vgplot:fred);评估在上中止 #.CL-USER> 我猜想消息的意思是“

当我使用SBCL(我最喜欢的实现)时,我经常在REPL中看到这种错误消息

CL-USER> (vgplot:fred) ; Evaluation aborted on
#<SB-INT:SIMPLE-READER-PACKAGE-ERROR "Symbol ~S not found in the ~A package." {1004289123}>. CL-USER>
CL-USER>(vgplot:fred);评估在上中止
#.CL-USER>
我猜想消息的意思是“VGPLOT包中找不到符号FRED”

我想我在建造SBCL的过程中犯了一些错误(尽管我似乎找不到确切的原因),只是想知道是否有人能提供一些建议,让这件事消失,因为这很烦人。

你可以这样做:

(defmethod print-object :around ((condition simple-condition) stream)
  (print-unreadable-object (condition stream)
    (apply #'format stream (simple-condition-format-control condition)
                           (simple-condition-format-arguments condition))
    (terpri stream)
    (call-next-method)))
这将把所有
simple条件
s(其中
sb int:simple reader error
是其中之一)的格式化描述添加到其打印表单中。我不会真的认为这是一个“好主意”,它可能有一些意想不到的后果。
一个更好的解决方案是修改slime/swank以自己打印此信息,但我不知道怎么做。

您使用slime吗?您是先进入调试器,还是它只是立即打印“Evaluation aborted”位?这似乎是错误对象的(无法读取)打印表示形式。此处的字符串不是完整的错误消息,而是用于帮助系统向用户显示错误的格式字符串。在调试器中,您应该看到预期的消息。因此,是的,使用slime和slime时,错误会正确显示。然而,在repl缓冲区中出现这种情况是令人恼火的,因为人们无法准确地获得所发生事情的历史记录。我当然可以理解这是一个不可读的对象,但为什么它会这样打印?也许是粘液相互作用?我不知道。它可能是一个slime REPL的东西:我在命令行启动的SBCL中没有看到它。你可以试着在slime邮件列表上询问。没有问题,只是正常打印条件对象。我不知道是否有一种方法可以抑制它,或者改变它,使其在印刷上美观;这从来没有困扰过我。事实上,这可能是最好的方式。Xach也是对的-它不是一个杀手,只是一个小麻烦-但我会接受这个答案。谢谢大家的帮助!