Interrompere la valutazione e osservare lo stack corrente nel debugger emacs-lisp?


17

Se alcune funzioni di emacs-lisp, come un hook in modalità principale, impiegano più tempo del previsto per l'esecuzione, a volte vorrei interromperlo e guardare lo stack corrente. Idealmente, mi piacerebbe anche poter esaminare i valori variabili e così via nel debugger. Non sto parlando di codice che sto deliberatamente eseguendo in modalità emacs-lisp, ma piuttosto di codice che viene eseguito nel normale funzionamento di emacs.

Come posso interrompere l'esecuzione del codice emacs-lisp direttamente in emacs? Non so in anticipo quale funzione devo eseguire il debug.

Ad esempio, la digitazione C-g, mentre interrompe l'esecuzione, non mi dice nulla su quale funzione sia stata interrotta.

Risposte:


18

Puoi C-gattivare il debugger attivando debug-on-quit. Basta fare

M-x toggle-debug-on-quit

Ora ogni volta che colpisci C-gavrai una traccia di quello che stava succedendo. Questo backtrace è interattivo, quindi puoi continuare a scorrere la funzione con de puoi iniziare a uscire con c. (Provalo, è più facile da vedere che da leggere).

Questo è lo stesso backtrace che ottieni aggiungendo (debug)nel tuo codice. Ecco un breve post sul blog e la relativa pagina di manuale Elisp .


(dice mitemente hello);) Fantastica nota che il debugger è interattivo - non avrei mai pensato di verificarlo :)
Sean Allred il

@SeanAllred si, l'ho scoperto solo un paio di settimane fa.
Malabarba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.