From: Sam S. <sd...@gn...> - 2003-09-10 21:38:38
|
>* Pascal J.Bourguignon <cwo@vasbezngvzntb.pbz> [2003-09-10 22:37:40 +0200]: > > In situations where there's no interactive channel to a clisp, how > could I direct the debugger to issue a backtrace automatically? > > I first tried to set a *debugger-hook*, but then I've no access to the > frames to be backtracked: > > [2]> (setq *debugger-hook* (lambda (condition last-hook) > (format t "~&ERROR: ~A" condition) > (let ((system::*debug-mode* 1) > (system::*debug-frame* (SYSTEM::THE-FRAME))) > (SYSTEM::DEBUG-BACKTRACE)))) > #<CLOSURE :LAMBDA (CONDITION LAST-HOOK) (FORMAT T "~&ERROR: ~A" CONDITION) > (LET ((SYSTEM::*DEBUG-MODE* 1) (SYSTEM::*DEBUG-FRAME* (SYSTEM::THE-FRAME))) > (SYSTEM::DEBUG-BACKTRACE))> > [9]> (/ 1 0) > ERROR: division by zero > *** - SYSTEM::FRAME-UP-1: NIL is not a stack pointer almost. see `break-loop' in src/reploop.lisp: [1]> (setq *debugger-hook* (lambda (condition last-hook) (format t "~&ERROR: ~A" condition) (let* ((sys::*frame-limit1* (sys::frame-limit1 13)) (sys::*frame-limit2* (sys::frame-limit2)) (sys::*debug-mode* 1) (sys::*debug-frame* (sys::frame-down-1 (sys::frame-up-1 sys::*frame-limit1* sys::*debug-mode*) sys::*debug-mode*))) (system::debug-backtrace)))) #<CLOSURE :LAMBDA (CONDITION LAST-HOOK) (FORMAT T "~&ERROR: ~A" CONDITION) (LET* ((SYSTEM::*FRAME-LIMIT1* (SYSTEM::FRAME-LIMIT1 13)) (SYSTEM::*FRAME-LIMIT2* (SYSTEM::FRAME-LIMIT2)) (SYSTEM::*DEBUG-MODE* 1) (SYSTEM::*DEBUG-FRAME* (SYSTEM::FRAME-DOWN-1 (SYSTEM::FRAME-UP-1 SYSTEM::*FRAME-LIMIT1* SYSTEM::*DEBUG-MODE*) SYSTEM::*DEBUG-MODE*))) (SYSTEM::DEBUG-BACKTRACE))> [2]> (/ 0 1) 0 [3]> (/ 1 0) ERROR: division by zero [1]> #<SYSTEM-FUNCTION SHOW-STACK> [2]> #<COMPILED-CLOSURE SYSTEM::DEBUG-BACKTRACE> [3]> #<SPECIAL-OPERATOR LET*> [4]> #<CLOSURE :LAMBDA (CONDITION LAST-HOOK) (FORMAT T "~&ERROR: ~A" CONDITION) (LET* ((SYSTEM::*FRAME-LIMIT1* (SYSTEM::FRAME-LIMIT1 13)) (SYSTEM::*FRAME-LIMIT2* (SYSTEM::FRAME-LIMIT2)) (SYSTEM::*DEBUG-MODE* 1) (SYSTEM::*DEBUG-FRAME* (SYSTEM::FRAME-DOWN-1 (SYSTEM::FRAME-UP-1 SYSTEM::*FRAME-LIMIT1* SYSTEM::*DEBUG-MODE*) SYSTEM::*DEBUG-MODE*))) (SYSTEM::DEBUG-BACKTRACE))> 2 [5]> #<SYSTEM-FUNCTION INVOKE-DEBUGGER> - #<SYSTEM::SIMPLE-DIVISION-BY-ZERO #x19ECF54D> - 0 [6]> #<SYSTEM-FUNCTION /> 1 - 1 EVAL frame for form (/ 1 0) - #<IO TERMINAL-STREAM> [7]> #<SYSTEM-FUNCTION SYSTEM::READ-EVAL-PRINT> - #<IO TERMINAL-STREAM> Printed 7 frames [4]> -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> Marriage is the sole cause of divorce. |