vars debug debugging emacs elisp

debugging - vars - ansible debug module



Cómo depurar elisp? (5)

El depurador (edebug) es bastante fácil de usar. Vaya a la definición de la función y escriba Mx edebug-defun . La próxima vez que se llame, podrá recorrer el código como con cualquier otro depurador. Tipo ? para la lista de combinaciones de teclas, o revise la documentación para edebug .

Normalmente, la forma más fácil de depurar es utilizando printf . ¿Qué puedo hacer para depurar emacs-lisp? ¿Cómo puedo imprimir algo al editor de emacs desde elisp? ¿O hay alguna forma de depurar el código elisp?

Por ejemplo, ¿cómo puedo verificar si el siguiente código se ejecuta en el archivo .emacs ?

(load "auctex.el" nil t t)


Esto es útil para imprimir valores

(message "Hello (%s)" foo)

pero no funciona tan bien para las estructuras de datos. Para eso, usa

(prin1 list-foo)

o (prin1-to-string) para incrustarlo en un (mensaje).


Hay dos depuradores en GNU Emacs:

  • edebug - explicado en otro post aquí
  • depurar

Yo uso debug Estos son puntos de entrada comunes (formas de usarlo):

  • Mx debug-on-entry seguido de una función que desea ingresar utilizando el depurador.

  • Mx toggle-debug-on-error - Ingrese el depurador cuando se produce un error.

  • Mx toggle-debug-on-quit : ingrese el depurador cuando el usuario presione Cg .
  • Coloque llamadas explícitas para debug función en lugares específicos (puntos de interrupción) en su código, para ingresar al depurador en esos lugares:

(debug)

Pasa por el depurador usando d , oc para omitir los detalles de una evaluación en particular.


La manera más fácil de depurar puede ser ejecutar su código de forma interactiva. Puede hacer eso en un búfer de lisp colocando su punto después de la expresión y ejecutando Cx Ce ( eval-last-sexp ).

Alternativamente:

(message "hello world")

Apague el mensaje para obtener más información sobre la función de mensaje incorporada. Si genera muchos mensajes, es posible que desee personalizar la variable message-log-max a un valor mayor.


Para responder a sus preguntas una por una:

  • imprime algo: hay un millón de maneras. (mensaje "Hola") pone la cadena en el área de eco; (inserte "hola") pone la cadena en el búfer actual en el punto ...
  • cómo puedo verificar si se ejecuta el siguiente código: simplemente reemplazaría "auctex.el" por (digamos) "frotzumotzulous" (es decir, cualquier cadena, siempre que no nombre un archivo real) y luego mira si recibes un mensaje de error. Si no obtiene ningún error, entonces claramente ese código no se está ejecutando.