Lavoro molto con Asciidoc in emacs (adoc-mode
). Credo che abbia un bug che si verifica quando si modifica il codice sorgente inline. Quello che succede è il blocco di emacs, il consumo della CPU arriva al 100%. Posso riprodurre facilmente questo comportamento.
Come faccio a stabilire in realtà quale script sta causando il blocco di emacs in questo modo ?? E preferibilmente produci un backtrace?
Dal momento che emacs si blocca mentre digitando all'interno del buffer, piuttosto che dopo aver eseguito un comando, roba del genere
toggle-debug-on-quit
o debug-on-entry
sono inutili
Suppongo che potrei segnare ogni singolo defun
in adoc-mode.el
con printf
s, ma spero che ci sia un modo più semplice :)
MODIFICARE:
Quindi, sono finito grep
ping mio ~/.emacs.d/lisp
per tutti defun
s e trace-function
ognuno. Sono stato in grado di restringere il problema e ho creato un piccolo test case.
Questi 3 file sono richiesti:
$ find /home/victor/.emacs.d/
/home/victor/.emacs.d/
/home/victor/.emacs.d/lisp
/home/victor/.emacs.d/lisp/doc-mode.el
/home/victor/.emacs.d/lisp/adoc-mode.el
/home/victor/.emacs.d/lisp/markup-faces.el
Mio .emacs
:
$ cat .emacs
(setq inhibit-startup-message t)
(add-to-list "load-path "~/.emacs.d/lisp/")
(require "adoc-mode)
(switch-to-buffer (find-file "test.doc"))
(adoc-mode)
(goto-char 29)
(delete-backward-char 5)
;; now (adoc-kwf-attriblist) is in endless loop!!
E il testcase è (la parola "shell" è cancellata da elisp):
$ cat test.doc
blah blah blah
[source,shell]
foo
bar
Adesso corri emacs
e sarà sospeso (adoc-kwf-attriblist)
. Non so molto sulla programmazione di emacs, ma sembra che questa cosa non metta fine al punto end
posizione.
(goto-char (or (text-property-not-all (point) end "adoc-attribute-list nil)
end))
risposte:
1 per risposta № 1il debug-on-entry potrebbe aiutare, se è possibile identificare una funzione nella sequenza che raggiunge il looper.
Hai provato "apropos" "debug"?
Non sono sicuro di debug-on-signal o debug-on-quit. Se si utilizza "kill" di Unix o Task Task di Windows "Termina operazione" invia un segnale a emacs, è possibile intercettarlo con il debug-on-signal.
E cercare "loop di debug" su https://groups.google.com/forum/#!forum/gnu.emacs.help
Inoltre, è possibile compilare alcuni functin in adoc-mode.el "debug" con edebug-defun.
(Spero di non aver risolto questo argomento. Sono nuovo qui e non ho familiarità con "Risposta" vs "Commento.)
0 per risposta № 2
Ecco come fare il debug. Il congelamento potrebbe verificarsi a causa di alcune modalità minori. Tu puoi fare C-hm per ottenere una lista delle modalità minori attive. Quindi avviare emacs con emacs -Q
e caricare adoc-mode
, quindi carica ciascuna delle modalità minori una per volta ogni volta cercando di riprodurre il problema. Questo potrebbe condurti al colpevole.