On Mon, May 19, 2008 at 4:58 AM, Aaron Feng aaron.feng@gmail.com wrote:
Hi Nikodemus,
This doesn't make sense to me. As far I've understood, the backtrace occurred in *inferior-lisp*, and there should be no "more" there after typing the "ba" at the debugger prompt.
When I load up emacs this is *exactly* what I see:
The value 68089408 is not of type SIMPLE-STRING. [Condition of type TYPE-ERROR]
Restarts: 0: [ABORT] Return to SLIME's top level. 1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "worker" {14132649}>)
Backtrace: 0: (SB-KERNEL:%SXHASH-SIMPLE-STRING #<unavailable argument>) 1: ((FLET SB-C::LOOKUP) (#<SB-C::VOLATILE-INFO-ENV "Working"> #<SB-C::COMPACT-INFO-ENV #1="Auxiliary"> #<SB-C::COMPACT-INFO-ENV #1#>)) 2: (MACRO-FUNCTION #<error printing object>) --more--
I kind of wish you had posted this in the first place. :) Because your first message didn't have the [Condition of TYPE-ERROR] I assume that the debugger was the SBCL debugger inside *inferior-lisp*, not the Slime debugger inside an SLDB buffer -- and they work quite differently.
At any rate, hitting neither ba not b will get you the backtrace we desire here. Here just clicking on the --more-- is indeed the right thing to do -- and if another --more-- appears further down clicking on it again till you have the full backtrace. ...but you don't need to do that now, since *slime-events* had everything I wanted to know. Just for future reference.
In *slime-events* you have:
("The value 68089408 is not of type SIMPLE-STRING." " [Condition of type TYPE-ERROR]" nil) (("ABORT" "Return to SLIME's top level.") ("TERMINATE-THREAD" "Terminate this thread (#<THREAD "worker" {1411A649}>)")) ((0 "(SB-KERNEL:%SXHASH-SIMPLE-STRING #<unavailable argument>)") (1 "((FLET SB-C::LOOKUP) (#<SB-C::VOLATILE-INFO-ENV "Working"> #<SB-C::COMPACT-INFO-ENV #1="Auxiliary"> #SB-C::COMPACT-INFO-ENV #1#))") (2 "(MACRO-FUNCTION #<error printing object>)") (3 "(SWANK::SYMBOL-INDENTATION #<error printing object>)") (4 "((FLET SWANK::CONSIDER) #<error printing object>)") (5 "((FLET SB-IMPL::ITERATE-OVER-HASH-TABLE) #<SB-IMPL::PACKAGE-HASHTABLE :SIZE 95 :FREE 36 :DELETED 0>)") (6 "(SWANK::UPDATE-INDENTATION/DELTA-FOR-EMACS #<HASH-TABLE :TEST EQ :COUNT 124 {14004AC1}> (#<PACKAGE "SWANK-IO-PACKAGE"> #<PACKAGE "SWANK"> #<PACKAGE "SWANK-MOP"> #<PACKAGE "SWANK-BACKEND"> #<PACKAGE "SWANK-LOADER"> #<PACKAGE "WEBLOCKS-ASD"> ...))") (7 "(SWANK::PERFORM-INDENTATION-UPDATE #SWANK::CONNECTION {14004B11} (#<PACKAGE "SWANK-IO-PACKAGE"> #<PACKAGE "SWANK"> #<PACKAGE "SWANK-MOP"> #<PACKAGE "SWANK-BACKEND"> #<PACKAGE "SWANK-LOADER"> #<PACKAGE "WEBLOCKS-ASD"> ...))") (8 "(SWANK::RUN-HOOK (SWANK::SYNC-INDENTATION-TO-EMACS SWANK::SYNC-FEATURES-TO-EMACS))") (9 "((LAMBDA NIL))") (10 "((LAMBDA (SWANK-BACKEND::HOOK SWANK-BACKEND::FUN)) #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL) {1410E8B5}>)") (11 "((LAMBDA NIL))") (12 "((LAMBDA (SWANK-BACKEND::HOOK SWANK-BACKEND::FUN)) #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<FUNCTION (LAMBDA NIL) {13E2D9F5}>)") (13 "(SWANK::CALL-WITH-REDIRECTED-IO #<SWANK::CONNECTION {14004B11}> #<CLOSURE (LAMBDA NIL) {1410E77D}>)") (14 "(SWANK::CALL-WITH-CONNECTION #<SWANK::CONNECTION {14004B11}> #<FUNCTION (LAMBDA NIL) {13E2D9F5}>)") (15 "(SWANK::HANDLE-REQUEST #<SWANK::CONNECTION {14004B11}>)") (16 "(SWANK::CALL-WITH-BINDINGS NIL #<CLOSURE (LAMBDA NIL) {1410E75D}>)") (17 "((FLET SB-THREAD::WITH-MUTEX-THUNK))") (18 "(SB-UNIX::CALL-WITH-LOCAL-INTERRUPTS #<CLOSURE (FLET SB-UNIX::WITH-LOCAL-INTERRUPTS-THUNK) {4D01C2D}> T)") (19 "((FLET SB-UNIX::WITHOUT-INTERRUPTS-THUNK) T)"))
Which not only tells us that the error occurs while Slime is updating identation information, we also (quite accidentally) learn that something is amiss: in frame 7 we see "WEBLOCKS-ASD" which is definitely not part of the normal SBCL distribution... and likely there are others as well. Either this is a custom core, or you do have either .sbclrc, or /etc/sbclrc.
Additionally, from the MACRO-FUNCTION & LOOKUP frames I can tell that somehow you have, in some package, a symbol whose name is not a string but a number. This is quite an achievement. :) Constructing a bogus symbol like that is not too hard (SAFETY 0 and lying to the compiler can do it), but getting them interned into a package is a lot harder -- I cannot think of a simple mistake that could cause that even in SAFETY 0 code. In other words, something is probably badly wrong with the image even before Slime starts.
Where do the extra packages like Weblocks come from? Once you know that, does the same error occur if you start without them?
Cheers,
-- Nikodemus
Hi Nikodemus,
You are my hero :) You are right, weblocks is not part of the sbcl distribution. I have built a custom core image for my sbcl to load various libs, such as weblcoks. I switched back to the original core image shipped by sbcl, and everything worked! Here comes the weird part, I took out only weblcoks in my custom core image and load it again to see if that was the problem. emacs and slime loaded just fine without it. However, I decided to put weblocks back in to the image after I have successfully loaded slime, and everything else continued to work! I don't know why, but everything is working.
The only thing I can guess is that I somehow built a bad image for sbcl. However, if that's was the case sbcl shouldn't have worked on the command line using the custom image which I have tried before the "fix". Maybe it's the combination of slime + bad sbcl image? Whatever it is, thanks for everything Nikodemus.
Aaron