2014-02-12 19 views
1

當我使用SBCL(我最喜歡的實現)我經常看到這種錯誤消息在REPLSBCL錯誤消息

CL-USER> (vgplot:fred) ; Evaluation aborted on 
#<SB-INT:SIMPLE-READER-PACKAGE-ERROR "Symbol ~S not found in the ~A package." {1004289123}>. CL-USER> 

我相信該消息的意思是說「符號FRED不是在VGPLOT發現包。」

我想我在構建SBCL時做了一些錯誤(雖然我似乎無法找到究竟是什麼),只是想知道是否有人可以提供關於如何讓它消失的建議,因爲它很煩人。

+0

你在使用SLIME嗎?你是首先進入調試器,還是隻是立即打印「評估中止」位? – Xach

+1

這似乎是錯誤對象的(不可讀)打印表示。該字符串沒有完整的錯誤消息,但格式字符串意在幫助系統向用戶顯示錯誤。在調試器中,你應該看到預期的消息。 – gsg

+0

所以是的,使用粘液和粘液,錯誤顯示正確。然而,在repl緩衝區中出現這種情況令人討厭,因爲人們無法準確瞭解發生的事情。我當然可以理解這是一個不可讀的對象,但爲什麼它會這樣打印?一個粘液交互可能? tks –

回答

0

你可以這樣做:

(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-condition S(其中sb-int:simple-reader-error就是其中之一)的格式描述添加到他們的印刷形式。我不會認爲這是一個「好主意」,它可能會產生一些意想不到的後果。

更好的解決方案是修改slime/swank來打印這些信息本身,但我無法弄清楚如何去做。

+0

其實,這可能是要走的路。 Xach也是對的 - 它不是一個殺手,只是一個小小的煩惱 - 但我會接受這個答案。感謝你的幫助! –