Interromper a avaliação e observar a pilha atual no depurador emacs-lisp?

17

Se alguma função do emacs-lisp, como um gancho de modo principal, estiver demorando mais do que o esperado para executar, às vezes eu gostaria de interrompê-lo e olhar para a pilha atual. Idealmente, eu também gostaria de ver valores de variáveis ​​e assim por diante no depurador. Não estou falando de código que estou executando deliberadamente no modo emacs-lisp, mas de código que é executado na operação normal do emacs.

Como posso interromper a execução do código emacs-lisp diretamente no emacs? Eu não sei de antemão qual função eu preciso depurar.

Por exemplo, digitar C-g, enquanto interrompe a execução, também não diz nada sobre qual função foi interrompida.

Kirill
fonte

Respostas:

18

Você pode C-gativar o depurador ativando debug-on-quit. Apenas faça

M-x toggle-debug-on-quit

Agora, toda vez que você clicar, C-gterá um histórico do que estava acontecendo. Esse backtrace é interativo, portanto você pode continuar percorrendo a função com de pode começar a sair c. (Tente, é mais fácil ver do que ler).

Este é o mesmo backtrace que você obtém adicionando (debug)dentro do seu código. Aqui está uma pequena publicação no blog e a página do manual relevante da Elisp .

Malabarba
fonte
(humildemente diz hello);) Awesome nota que o depurador é interativo - Eu nunca pensei para verificar se :)
Sean Allred
@SeanAllred sim, eu descobri apenas algumas semanas atrás.
Malabarba