Como depurar o Helm

7

Estou tendo alguns problemas com o leme, por isso me debug-on-erroresforcei para localizar o problema. Agora, sempre que o problema ocorre, o *Backtrace*buffer aparece como esperado, mas ainda estou em um dos principais modos do leme e não consigo navegar no buffer de backtrace e depurar normalmente.

O modo principal ainda está usando o minibuffer e também parece estar "roubando" minhas seqüências de teclas e me impedindo de depurar. Quando saio do helm-mulit-occurem andamento, o buffer de backtrace é limpo e não consigo continuar a depuração.

Existe uma maneira de "pausar" um modo principal enquanto mantém o depurador elisp em execução para que eu possa depurar normalmente?

nispio
fonte
Qual função está acionando o backtrace? Eu usei debug-on-entryon helm(a depuração por erro não seria acionada porque não havia erros) e ainda consigo depurar.
Vamsi
@Vamsi: Estou usando helm-multi-occure o erro específico que está ocorrendo algum tempo após o leme estar sendo executado com êxito é helm-interpret-value: Symbol must be a function or a variable.
Nispio 29/09/14
No mapa de teclas desse modo principal, vincule a tecla f5 a outra janela. Então você deve conseguir mudar isso. Além disso, defina os minibuffers de ativação-recursiva como t.
Malabarba 29/09
@ Malabarba: O comando other-windownão faz nada neste modo, e o minibuffer parece sempre ter foco. C-h mé mapeado para o comando helm-help, mas rodando manualmente describe-modeme diz que eu estou no minibuffer-inactive-mode.
Nispio 29/09/14
11
Observando o backtrace, você deve saber qual função está chamando helm-interpret-value. Então você pode fazer o Edebug e descobrir o que está acontecendo.
Malabarba 02/10

Respostas:

3

O comando helm-toggle-suspend-updateestá vinculado C-!por padrão. Ele não fecha o leme ou encerra a atualização recursiva, mas temporariamente torna o modo de leme muito menos "invasivo". Suspender atualizações impedirá o leme de "roubar" todas as entradas do teclado e do mouse, o que pode permitir que você depure o processo do leme em outra janela.

nispio
fonte
2

Não é possível "pausar" um modo principal, mas, como sugerido nos comentários das suas perguntas, deve ser possível afastar-se do buffer que acionou o erro e para o buffer de retorno. Se o modo do buffer em que o erro ocorreu substituir as ligações globais normais para mover para outro buffer, a inclusão explícita da chave em seu mapa de teclas poderá devolver a capacidade de selecionar outro buffer.

No entanto, também é possível que o modo leia a entrada do usuário de uma maneira mais sofisticada, tornando impossível se afastar. No caso de um modo / buffer de conclusão como helmesse, poderia fazer sentido.

No entanto, você pode simplesmente sair helme ir para *Backtrace*. O buffer não será mais exibido em uma janela, mas ainda deve existir e conter o backtrace mais recente. Você menciona que o "buffer de backtrace é limpo"; o buffer simplesmente desaparece ou seu conteúdo é realmente limpo? No último caso, convém abrir um problema no helmrepositório, pois isso pode ser considerado um bug.

tarso
fonte
Enquanto o leme ainda está ativo, tentei clicar no buffer de backtrace, religar as seqüências de teclas e ligar M-x other-windowdiretamente, mas nenhuma delas me permitirá desviar o foco do minibuffer de conclusão do leme. Quando o buffer de backtrace aparece pela primeira vez, é a janela ativa, mas quase todo pressionamento de tecla é "roubado" pelo leme e me leva de volta ao modo de conclusão. Quando eu saio do leme com C-go buffer de backtrace é limpo, sem informações desfazer.
Nispio
11
Soa como helm usa edição recursiva (consulte (elisp)Recursive Editing. Faz sentido para um pacote como, helmmas também significa que sair helm(invocando regularmente um comando ou abortando no seu caso) retornará ao nível anterior, o que faz com que o retorno ao nível atual seja perdido. Então você estava completamente no caminho certo. Talvez o leme já forneça uma solução para isso, verifique suas perguntas frequentes, caso contrário abra um problema. M-x fundamental-modeTambém pode funcionar, embora também seja possível que isso mude o modo no buffer errado.
tarsius
11
erro ao analisar o comentário anterior: parêntese incomparável. ;-)
nispio
Realmente não sei o que você quer dizer com isso.
tarsius
Por favor, mude o título. Na maioria dos casos, "depurar modos principais" não causa problemas; esse problema é muito específico ao leme.
tarsius