From: Martin A. <ma...@at...> - 2000-09-13 19:55:43
|
Hi, I get some really strange behavior using ILISP together with SBCL-0.6.7. The bug is not always reproducible, although it is reproducible after I start up a fresh sbcl from ILISP. If I do that, and hit C-c, e.g. #'interrupt-subjob-ilisp, that seems to send a signal to SBCL, this will lead to an invocation of the debugger. But, if I want to execute any debug-commands now, this won't work at first, and I'll get the following backtrace (sorry for all the text, but it may be necessary): Starting sbcl --noinform ... * * debugger invoked on *DEBUG-CONDITION* of type SIMPLE-CONDITION: interrupted at #X400DD7DE restarts: 0: [CONTINUE] Return from BREAK. 1: [ABORT ] Return to toplevel. Within the debugger, you can type HELP for help. ("foreign function call land") 0] backt debugger invoked on *DEBUG-CONDITION* of type SB-KERNEL:FLOATING-POINT-EXCEPTION: An arithmetic error SB-KERNEL:FLOATING-POINT-EXCEPTION was signalled. debugger invoked on *DEBUG-CONDITION* of type SIMPLE-ERROR: error in function SB-CONDITIONS::FIND-SLOT-DEFAULT: unbound condition slot: SB-CONDITIONS::FLAGS restarts: 0: [ABORT ] Return to debug level 1. 1: [CONTINUE] Return from BREAK. 2: Return to toplevel. Within the debugger, you can type HELP for help. (SB-VM:SIGFPE-HANDLER #<SB-DEBUG::UNPRINTABLE-OBJECT unavailable arg> #<SB-DEBUG::UNPRINTABLE-OBJECT unavailable arg> #<SB-DEBUG::UNPRINTABLE-OBJECT unavailable arg>) 0]] backt 0: (SB-VM:SIGFPE-HANDLER #<SB-DEBUG::UNPRINTABLE-OBJECT unavailable arg> #<SB-DEBUG::UNPRINTABLE-OBJECT unavailable arg> #<SB-DEBUG::UNPRINTABLE-OBJECT unavailable arg>) 1: ("foreign function call land") 2: ("foreign function call land") 3: ("foreign function call land") 4: (SB-KERNEL:%UNARY-TRUNCATE 21.75) 5: (SB-IMPL::MAKE-OR-REMAKE-PACKAGE-HASHTABLE 18 #<SB-IMPL::PACKAGE-HASHTABLE :SIZE 21 :FREE 20 :DELETED 0>) 6: (SB-IMPL::ADD-SYMBOL #<SB-IMPL::PACKAGE-HASHTABLE :SIZE 21 :FREE 20 :DELETED 0> BACKT) 7: (SB-IMPL::INTERN* "BACKTES-NOT-EXISTisp/elisp-lib/ilisp/sblispsp.x86ffe specification are: ~:S. The class precedence list is:~%~S~%~ There are ~D methods specialized for this class. command line do this: echo 'int summish(int x, int y) { return 1 + x + y; }' > /tmp/ffi-test.c make /tmp/ffi-test.o # i.e. cc -c -o /tmp/ffi-test.o /tmp/ffi-test.c ld -shared -o /tmp/ffi-test.so /tmp/ffi-test.o then in SBCL do this: (LOAD-1-FOREIGN \"/tmp/ffi-test.so\") (DEF-ALIEN-ROUTINE SUMMISH INT (X INT) (Y INT)) Now running (SUMMISH 10 20) should return 31. local options, only affecting tracing of the immediately preceding function name. Local options override global options. By default, TRACE causes a printout on *TRACE-OUTPUT* each time that one of the named functions is entered or returns. (This is the basic, ANSI Common Lisp behavior of TRACE.) As an SBCL extension, the :REPORT SB-EXT:PROFILE option can be used to instead cause information to be silently recorded to be inspected later using the SB-EXT:PROFILE function. The following options are defined: :REPORT Report-Type If Report-Type is TRACE (the default) then information is reported by printing immediately. If Report-Type is SB-EXT:PROFILE, information is recorded for later summary by calls to SB-EXT:PROFILE. If Report-Type is NIL, then the only effect of the trace is to execute other options (e.g. PRINT or BREAK). :CONDITION Form :CONDITION-AFTER Form :CONDITION-ALL Form If :CONDITION is specified, then TRACE does nothing unless Form evaluates to true at the time of the call. :CONDITION-AFTER is similar, but suppresses the initial printout, and is tested when the function returns. :CONDITION-ALL tries both before and after. :BREAK Form :BREAK-AFTER Form :BREAK-ALL Form If specified, and Form evaluates to true, then the debugger is invoked at the start of the function, at the end of the function, or both, according to the respective option. :PRINT Form :PRINT-AFTER Form :PRINT-ALL Form In addition to the usual printout, the result of evaluating Form is printed at the start of the function, at the end of the function, or both, according to the respective option. Multiple print options cause multiple values to be printed. :WHEREIN Names If specified, Names is a function name or list of names. TRACE does nothing unless a call to one of those functions encloses the call to this function (i.e. it would appear in a backtrace.) Anonymous functions have string names like \"DEFUN FOO\". :ENCAPSULATE {:DEFAULT | T | NIL} If T, the tracing is done via encapsulation (redefining the function name) rather than by modifying the function. :DEFAULT is the default, and means to use encapsulation for interpreted functions and funcallable instances, breakpoints otherwise. When encapsulation is used, forms are *not* evaluated in the function's lexical environment, but SB-DEBUG:ARG can still be used. :FUNCTION Function-Form This is a not really an option, but rather another way of specifying what function to trace. The Function-Form is evaluated immediately, and the resulting function is traced. :CONDITION, :BREAK and :PRINT forms are evaluated in the lexical environment of the called function; SB-DEBUG:VAR and SB-DEBUG:ARG can be used. The -AFTER and -ALL forms are evaluated in the null environment." 5 #<PACKAGE "COMMON-LISP-USER">) 8: (READ-PRESERVING-WHITESPACE #<SYNONYM-STREAM :SYMBOL *TERMINAL-IO* {5054AED}> T NIL T) 9: (READ-PRESERVING-WHITESPACE #<SYNONYM-STREAM :SYMBOL *TERMINAL-IO* {5054AED}> T NIL NIL) 10: (READ #<SYNONYM-STREAM :SYMBOL *TERMINAL-IO* {5054AED}> T NIL NIL) 11: (SB-DEBUG::DEBUG-LOOP) 12: (INTERNAL-DEBUG) 13: ("DEFUN INVOKE-DEBUGGER") 14: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<FUNCTION "CLOSURE" {904C3E9}>) 15: (BREAK "interrupted at #X~X" 1074649054) 16: ("foreign function call land") 17: ("foreign function call land") 18: ("foreign function call land") 19: ("foreign function call land") 20: ("foreign function call land") 21: (SB-SYS:WAIT-UNTIL-FD-USABLE 0 :INPUT NIL) 22: (SB-IMPL::DO-INPUT #<SB-SYS:FD-STREAM for "standard input" {900102D}>) 23: (SB-IMPL::INPUT-CHARACTER #<SB-SYS:FD-STREAM for "standard input" {900102D}> NIL (SB-IMPL::*EOF*)) 24: (SB-IMPL::SYNONYM-IN #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {50563DD}> NIL (SB-IMPL::*EOF*)) 25: (SB-IMPL::TWO-WAY-IN #<TWO-WAY-STREAM :INPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {50563DD}> :OUTPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {516FB9D}> {5054B35}> NIL (SB-IMPL::*EOF*)) 26: (READ-CHAR #<TWO-WAY-STREAM :INPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {50563DD}> :OUTPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {516FB9D}> {5054B35}> NIL (SB-IMPL::*EOF*) #<SB-DEBUG::UNPRINTABLE-OBJECT unused arg>) 27: (READ-PRESERVING-WHITESPACE #<TWO-WAY-STREAM :INPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {50563DD}> :OUTPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {516FB9D}> {5054B35}> NIL (:EOF) T) 28: (READ-PRESERVING-WHITESPACE #<TWO-WAY-STREAM :INPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {50563DD}> :OUTPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {516FB9D}> {5054B35}> NIL (:EOF) NIL) 29: (READ #<TWO-WAY-STREAM :INPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {50563DD}> :OUTPUT-STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDOUT* {516FB9D}> {5054B35}> NIL (:EOF) NIL) 30: (SB-IMPL::TOPLEVEL-REPL NIL) 31: (SB-IMPL::RESTART-LISP) 0]] I've looked at the source, but unfortunately I was not able to track it down. It seems that the complete signalling stuff is disabled!? Opinions, comments?? Cheers, Martin -- Homepage: http://www.atzmueller.net/ Email: ma...@at... |