/ / debug di emacs che si blocca in adoc-mode - emacs, elisp

il debug di emacs si blocca in adoc-mode - emacs, elisp

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 printfs, ma spero che ci sia un modo più semplice :)

MODIFICARE: Quindi, sono finito grepping mio ~/.emacs.d/lisp per tutti defuns 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 № 1

il 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.