May 22
SLDB (SLIME Debugger)
SLDB es el debugger incluido en SLIME, aunque por supuesto se puede especificar otro; aunque este esta optimizado para CL y bien integrado en emacs.
Ciertas condiciones en el sistema Lisp invocaran a SLDB en emacs mediante *DEBUGGER-HOOK*. SLDB mostrara un buffer con la condicion que ha lanzado la senal. Es a partir de este momento cuando se nos da la posibilidad de debuggear mediante SLDB.
Para examinar frames tenemos los siguientes keybindings:
t : ‘sldb-toggle-details‘ ; Hace toggle para mostrar las variables locales y los tags CATCH.
v : ‘sldb-show-source‘ ; Visualiza las expresiones de codigo del frame actual.
e : ‘sldb-eval-in-frame‘ ; Evalua una expresion en el frame. La expresion puede referirse a las variables locales disponibles del frame.
d : ‘sldb-pprint-eval-in-frame‘ ; Evalua una expresion en el frame e imprime el resultado en un buffer temporal.
D : ‘sldb-disassemble‘ ; Desensambla la funcion de un frame. Incluye informacion como punteros a instrucciones en el frame.
i : ‘sldb-inspect-in-frame‘ ; Inspecciona el resultado de evaluar una expresion en el frame.
C-c C-c : ‘sldb-recompile-frame-source‘ ; Recompila un frame. Mediante el argumento con C-u C-c C-c recompila el frame con las opciones de debugging maximas posibles.
Para reiniciar la invocacion:
a : ‘sldb-abort‘ ; Invoca el reinicio ABORT.
q : ‘sldb-quit‘ ; Sale. Para peticiones de evaluacion SLIME, invoca el reinicio el cual restaura el estado conocido de un programa. Para errores en otros threads, es necesario indagar en [SWANK:*SLDB-QUIT-RESTART*].
c : ‘sldb-continue‘ ; invoca el reinicio CONTINUE
0…9 : invoca el reinicio por numero
Los reinicios pueden ser tambien invocados pulsando RET en el buffer.
Para navegar entre frames:
n : ‘sldb-down‘ ; Se mueve frame abajo.
p : ‘sldb-up‘ ; Se mueve frame arriba.
M-n : ‘sldb-details-down‘ ; Se mueve frame abajo «con azucar»: oculta los detalles del frame original y muestra detalles y codigo fuente del siguiente. El movimiento entre frames con azucarado muesta los detalles del codigo fuente del frame actual solamente.
M-p : ‘sldb-details-up‘ ; Se mueve frame arriba «con azucar»: oculta los detalles del frame original y muestra detalles y codigo fuente del anterior. El movimiento entre frames con azucarado muesta los detalles del codigo fuente del frame actual solamente.
> : ‘sldb-end-of-backtrace‘ ; Captura el backtrace entero y salta al ultimo frame.
< : ‘sldb-beginning-of-backtrace‘ ; Salta al primer frame.
Para realizar pasos con el debugger empleamos los siguientes keybidings:
s : ‘sldb-step‘ ; Da un paso hacia la siguiente expresion en el frame. Para CMUCL esto significa que hace set para un breakpoint para todas aquellas partes de codigo del bloque actual de codigo el cual es alcanzable desde el codigo en la localizacion actual.
x : ‘sldb-next‘ ; Da un paso hacia adelante en la funcion actual.
o : ‘sldb-out‘ ; Para el paso-simple de forma temporal, pero lo continua una vez se vuelva de la funcion actual.
Otros keybidings empleandos en el debugger y de utilidad son:
r : ‘sldb-restart-frame‘ ; Reinicia la ejecucion de un frame con los mismos argumentos que fueron originalmente usados en la llamada.
R : ‘sldb-return-from-frame‘ ; Vuelve desde el frame con el valor introducido en el minibuffer.
B : ‘sldb-break-with-default-debugger‘ ; Sale de SLDB y debuggea la condicion usando el debugger por defecto del sistema Lisp.
C : ‘sldb-inspect-condition‘ ; Inspecciona la condicion actual a ser debuggeada.
: : ‘slime-interactive-eval‘ ; Evalua una expresion introducida en el minibuffer.
A : ‘sldb-break-with-system-debugger‘ ; Adjunta el debugger al proceso actual lisp.
Captura de pantalla de SLDB