2009-08-29 15 views
5

sto sviluppando una modalità importante per Emacs. C'è un modo in cui posso impostare un punto di interruzione nel codice sorgente quando si verifica la fontificazione, ad esempio?Debug Emacs Lisp modo maggiore

risposta

7

trovare la fonte Lisp della funzione che si desidera scorrere e digitare M-x edebug-defun lì. Quindi, ogni volta che viene eseguita tale funzione, verrai automaticamente inserito in Edebug, dove potrai attraversarlo se lo desideri.

funzioni Fontification può essere un po 'complicato, però, in quanto possono essere invocati in tempi dispari. È possibile utilizzare la funzione message per scrivere messaggi nel buffer *Messages*. Un altro trucco consiste nel disattivare il blocco dei caratteri (in modo che la funzione non venga richiamata automaticamente), quindi preparare la funzione di cui si sta eseguendo il debug con edebug-defun e richiamarla manualmente. (Si noti che è possibile utilizzare M-: (a.k.a eval-expression) per richiamare una funzione non interattiva.)

+0

Sì, questo funziona per il mio rientro.. -regione, ma, come avvertite, non per la funzione di certificazione! Grazie – Alex

4

Il manuale per il debug di elisp può essere found here.

È possibile utilizzare edebug come detto, c'è anche M-x debug-on-entry ed è possibile impostare (setq debug-on-quit t). Controlla tutte le opzioni nel link, tutto dipende da come vuoi scuoiare il gatto.

2

E proprio come in qualsiasi altro linguaggio di programmazione, è possibile eseguire il debug con le dichiarazioni di stampa. (message "here, foo=%d" foo) è tuo amico. (Probabilmente sai che questi messaggi sono accumulati nel buffer *Messages*, quindi se vanno troppo velocemente, non è un problema.) trace-function è anche utile.

Ho scritto un sacco di modalità di Emacs e avrete solo raramente necessario il debugger. Di solito il problema si espone con alcune affermazioni di stampa ben posizionate.

+0

In linea di principio, un debugger è solo una macchina "insert-print-statement" glorificata ma automatizza il compito per voi, senza rovinare il codice stesso E troverei quella funzionalità utile per il debugging della funzione elisp che sto scrivendo, soprattutto perché sono abbastanza nuovo per l'elis – Alex

0

Anche su un'altra nota, se si desidera eseguire rapidamente il debug di alcuni snippet di Lisp, si consiglia di utilizzare anche la modalità ielm che funziona come ad esempio la modalità interattiva di Python.

1

Invece di edebug è possibile utilizzare debug. Per aprire il debugger alla voce di una funzione, utilizzare M-x debug-on-entry THE-FUNCTION. Oppure inserisci chiamate alla funzione debug nel codice sorgente per fungere da punti di interruzione (rivalutazione del codice).

Tuttavia, fontification ha effettivamente posto in tempi dispari, coinvolgendo visualizzare nuovamente ecc Se si ha realmente bisogno di eseguire il debug del processo fontification, quindi è possibile utilizzare le funzioni, non solo espressioni regolari, in font-lock-keywords.

Ma in realtà hai bisogno di essere più preciso circa i vostri problemi di debug font-lock. Tipicamente i problemi che le persone hanno sono (a) comprendere font-lock-keywords (la struttura) e (b) espressioni regolari che non corrispondono a ciò che vogliono.

In ogni caso, per rispondere alla tua domanda su * punti di interruzione ": Sì, basta inserire (debug) in qualsiasi punto si vuole nel codice sorgente Lisp Il debugger verrà inserito in quel punto

Problemi correlati