2010-06-19 19 views
9

Estoy tratando de aprender Lisp común actualmente y he estado usando sbcl (espero que sea una elección aplicación decente.)cómo desactivar el depurador en sbcl

Viniendo de rubí y el IRB encuentro la automática movido a un depurador en cada error un poco molesto en este momento. ¿Hay alguna manera de desactivarlo temporalmente cuando estoy jugando?

Respuesta

10

Common Lisp tiene una variable *debugger-hook*, que se puede enlazar/establecer en una función.

* (aref "123" 10) 

debugger invoked on a SB-INT:INVALID-ARRAY-INDEX-ERROR: 
    Index 10 out of bounds for (SIMPLE-ARRAY CHARACTER 
           (3)), should be nonnegative and <3. 

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. 

restarts (invokable by number or by possibly-abbreviated name): 
    0: [ABORT] Exit debugger, returning to top level. 

(SB-INT:INVALID-ARRAY-INDEX-ERROR "123" 10 3 NIL) 
0] 0 

* (defun debug-ignore (c h) (declare (ignore h)) (print c) (abort)) 

DEBUG-IGNORE 
* (setf *debugger-hook* #'debug-ignore) 

#<FUNCTION DEBUG-IGNORE> 
* (aref "123" 10) 

#<SB-INT:INVALID-ARRAY-INDEX-ERROR {1002A661D1}> 
* 
+0

Eso funciona genial, estoy seguro de que algún día necesitaré el depurador, pero para probarlo, es un poco molesto en este momento :) Gracias por la respuesta. – nkassis

8

Hay una opción de --disable-debugger de línea de comandos, por ejemplo:

$ sbcl --disable-debugger 

Desde la página del manual:

Por defecto, cuando SBCL encuentra un error , entra en la orden interna depurador, lo que permite interactivo diagnóstico y posible intercesión. Esta opción desactiva el depurador, , causando errores en la impresión de una traza inversa y sale con el estado 1 en su lugar - que es un modo de operación mejor adecuado para el procesamiento por lotes. Consulte el manual de usuario en SB-EXT: DISABLE-DEBUGGER para obtener más información.

También hay --noinform y --noprint opciones de CL que pueden serle de utilidad.

+0

Buen hallazgo, estaba tratando de encontrar una manera de evitar que salga al final. – nkassis

+0

Para cualquiera que aprenda con clisp, la opción equivalente es: $ clisp -on-error abortar – silijon

Cuestiones relacionadas