2009-08-29 22 views
5

Estoy desarrollando un modo principal para Emacs. ¿Hay alguna forma en que pueda establecer un punto de interrupción en el código fuente cuando ocurre la creación de fuentes, por ejemplo?Depurar Emacs Lisp modo principal

Respuesta

7

Encuentra la fuente Lisp de la función por la que deseas pasar y escribe M-x edebug-defun allí. Luego, cada vez que se ejecute esa función, se te colocará automáticamente en Edebug, donde puedes pasar si lo deseas.

Las funciones de fuentes pueden ser un poco complicadas, ya que se pueden invocar en momentos impares. Puede usar la función message para escribir mensajes en el buffer *Messages*. Otro truco es desactivar Font Lock (para que su función no se invoque automáticamente), luego prepare la función que está depurando con edebug-defun y la invoque manualmente. (Tenga en cuenta que puede usar M-: (a.k.a. eval-expression) para invocar una función no interactiva.)

+0

Sí, esto funciona para mi guión.. -región, pero, como advierte, ¡no para la función de la fuente! Gracias. – Alex

4

El manual para depurar elisp puede ser found here.

Puede utilizado edebug como se ha mencionado, también hay M-x debug-on-entry y se puede establecer (setq debug-on-quit t). Echa un vistazo a todas las opciones en el enlace, todo depende de cómo quieras despellejar al gato.

2

Y al igual que en cualquier otro lenguaje de programación, puede depurar con instrucciones de impresión. (message "here, foo=%d" foo) es tu amigo. (Probablemente sepa que estos mensajes se acumulan en el búfer *Messages*, por lo que si pasan demasiado rápido, eso no es un problema.) trace-function también es útil.

He escrito muchos modos de emacs y rara vez he necesitado el depurador. Por lo general, el problema se expone a sí mismo con unas pocas declaraciones impresas bien colocadas.

+0

En principio, un depurador es simplemente una máquina glorificada de 'insertar-imprimir-declaración' pero automatiza la tarea para usted, sin estropear el código mismo . Y encontraría esa funcionalidad útil para depurar la función elisp que estoy escribiendo, especialmente porque soy bastante nuevo en elisp – Alex

0

Por otro lado, si desea depurar rápidamente algunos fragmentos de lisp, quizás quiera usar el modo ielm también, que funciona como, por ejemplo, el modo interactivo de python.

1

En lugar de edebug puede usar debug. Para abrir el depurador al ingresar a una función, use M-x debug-on-entry THE-FUNCTION. O inserte llamadas a la función debug en el código fuente para servir como puntos de interrupción (vuelva a evaluar el código).

Sin embargo, la creación de fuentes en realidad tiene lugar en momentos extraños, que implica la redisposición, etc. Si realmente necesita depurar el proceso de la fuente, puede usar funciones, no solo expresiones regulares, en font-lock-keywords.

Pero realmente tendrá que ser más específico sobre los problemas de depuración de font-lock. Por lo general, los problemas que tienen las personas son (a) comprender font-lock-keywords (la estructura) y (b) expresiones regulares que no coinciden con lo que desean.

De todos modos, para responder a su pregunta sobre * puntos de ruptura ": Sí, basta con insertar (debug) en cualquier punto que se desee en el código fuente Lisp El depurador se introducirá en ese punto