Impostazione di un punto di interruzione su un programma Emacs Lisp in esecuzione

StackOverflow https://stackoverflow.com/questions/805292

  •  03-07-2019
  •  | 
  •  

Domanda

Sto riscontrando un problema con un pacchetto lisp Emacs che ho rimosso dalla distribuzione di Ubuntu. Il pacchetto è JDEE e si lamenta di Args fuori intervallo: "quot" 63 ", 0, 4 nel mini buffer e nel buffer * Messages * ogni volta che apro un file. Questo bug sembra essere stato segnalato lo scorso settembre ma non è stata intrapresa alcuna azione. Non sono un principiante di Emacs, dopo aver scritto un po 'di codice Elisp, ma non ho mai tentato di eseguire il debug di qualcosa di simile. Vorrei interrompere il caricamento del file in un debugger quando questo errore si verifica almeno per avere un'idea di da dove provenga il problema. Ho letto la sezione 18.1.1 del manuale Elisp su " Inserimento del debugger in caso di errore " ma provando a caricare il file dopo aver giocato con varie combinazioni di valori per debug-on-error , debug-ignored-errors e debug-on-signal sembra non avere alcun effetto. Qualcuno ha qualche suggerimento per il mio prossimo passo?

È stato utile?

Soluzione

Se il debug-on-error non funziona, inizierei con l'origine stessa. Trova il keybinding / evento che causa il problema e individua la funzione.

C-h k <keystrokes>
M-x find-function <function-name-from-above>

Ora, una volta che sei alla fonte

M-x edebug-defun

E la prossima volta che premi il tasto, dovresti essere in grado di scorrere il programma. A quel punto, puoi vedere quale parte causa un errore e approfondire in quel modo.

Puoi anche provare a impostare la variabile 'stack-trace-on-error per vedere se riesci a trovare il colpevole (sebbene ' debug-on-error di solito funzioni per me, non so perché non per te).

Come ultima risorsa (se edebug-defun non funziona), puoi ridefinire la routine con una chiamata a (debug) , in un certo senso lo stesso.

Altri suggerimenti

Suppongo che JDEE stia in qualche modo inibendo il debug-on-error. Forse grep attraverso i suoi file per il messaggio di errore "Args fuori intervallo". Durante il debug, assicurati di caricare i file .el non compilati, non i file .elc compilati in byte (lo noterai nel debugger se stai eseguendo compilati in byte codice) immettendo comandi come (carica " foo.el ") anziché (carica " foo ") .

Ho avuto lo stesso errore quando ho usato find-grep dopo aver ridefinito accidentalmente (stringa di tempo corrente) in uno dei miei script.

Usando il suggerimento Mx edebug-defun pubblicato sopra sono riuscito a trovare il problema quando ho sfogliato il codice dando l'errore vedendo la chiamata a (current-time-string) .

Non sono sicuro di quanto sia utile nel tuo caso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top