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
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.)
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.
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.
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
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.
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
- 1. Debug di codice Lisp
- 2. PPRINT in Emacs Lisp?
- 3. Evidenziazione sintassi Emacs Lisp
- 4. Emacs senza Lisp
- 5. Differenza di struttura tra common lisp ed emacs lisp
- 6. Sovrascrittura di una funzione in Emacs Lisp
- 7. nesting backquote e `in emacs lisp
- 8. esegue continuamente una funzione emacs lisp
- 9. Come aggiungo le date in Emacs usando Emacs Lisp?
- 10. avvolgere una funzione in emacs lisp
- 11. Come copiare negli appunti in Emacs Lisp
- 12. moltiplicazione della lista vuota in emacs lisp
- 13. Date e orari in Emacs Lisp
- 14. Emacs Lisp: valuta variabile in alist
- 15. quale shell-command in emacs lisp?
- 16. Schema dialetto di Lisp in Emacs
- 17. Come posso verificare se un file esiste usando Emacs Lisp?
- 18. Come fare riferimento al file attualmente caricato in Emacs Lisp?
- 19. Come creare una funzione temporanea in Emacs Lisp
- 20. emacs lisp, come ottenere la modalità buffer buffer?
- 21. Come convertire l'elenco in stringa in Emacs Lisp
- 22. libreria lisp di emacs per moduli di input?
- 23. Come aggiungere più elementi a un elenco in Emacs lisp
- 24. Emacs Lisp: Come, un buffer interattivo con REPL?
- 25. Interactive Emacs Lisp funzionare per scambiare due parole con l'altro
- 26. Come imposto in modo programmatico una variabile personalizzata in Emacs Lisp?
- 27. C'è un modo per annullare la definizione di una funzione in emacs lisp?
- 28. Il modo migliore per salvare molte coppie di posizioni in Emacs Lisp
- 29. In Lisp (Clojure, Emacs Lisp), qual è la differenza tra lista e preventivo?
- 30. Quali sono le principali differenze tra Emacs Lisp e Common Lisp?
Sì, questo funziona per il mio rientro.. -regione, ma, come avvertite, non per la funzione di certificazione! Grazie – Alex