Como faço para solucionar problemas do Emacs?

21

Em uma situação em que o Emacs não está se comportando como eu quero, o que posso fazer para solucionar o problema? Que etapas posso tomar para encontrar e corrigir o problema sozinho?

Ou, na sua falta, como posso reunir informações úteis para que as pessoas aqui (ou na lista de discussão ou em outros fóruns) possam me ajudar com o meu problema?

Meu Emacs inclui muitos pacotes, uma coleção de trechos copiados e colados (ou mortos e arrancados) de toda a Internet e meu próprio elisp personalizado, alguns dos quais não me lembro de escrever ou que não entendo mais. Existe uma maneira de entender todas essas complicações?

Tyler
fonte
Não tenho certeza se este é o melhor lugar para isso, mas há muitas perguntas que obtêm respostas / comentários solicitando emacs -Qcomo primeiro passo. Eu escrevi isso como algo para vincular essas perguntas a uma ajuda genérica para novos usuários.
Tyler
Sim, é o melhor lugar para isso. Na verdade, essa pergunta foi sugerida (quase) há 2 anos: meta.emacs.stackexchange.com/q/198/184 Obrigado!
T. Verron

Respostas:

28

Etapa 1: executando emacs -Q

A primeira coisa que você precisa fazer é executar o emacs sem nenhuma de suas personalizações. Se você pode reproduzir o problema no Emacs de baunilha, pode ser um bug no próprio Emacs. Isso é raro, mas descartamos isso como um primeiro passo.

Se você iniciar o Emacs a partir da linha de comando com a -Qbandeira, ou seja, emacs -Qobterá um emacs simples ou 'vanilla', sem nenhuma de suas personalizações locais carregadas. Seu problema ainda ocorre? Nesse caso, pule para "Fornecendo uma receita de bug".

Etapa 1b: e se o problema for com um pacote?

Se o seu problema for específico para um pacote específico, obviamente você não poderá reproduzi-lo sem carregar o pacote. Mas você deseja carregar apenas o pacote em questão, nem toda a sua configuração. Para fazer isso, execute emacs -Qnovamente e prepare um script curto, como o seguinte:

(require 'package)
(setq package-load-list
      '((package1 t)))
(package-initialize)

Substitua package1pelo nome do pacote que você deseja carregar. Se você precisar carregar vários pacotes, modifique o script adequadamente:

(require 'package)
(setq package-load-list
      '((package1 t)
        (package2 t)
        (package3 t)))
(package-initialize)

Para carregar esse código, você pode colá-lo no *scratch*buffer e ligar M-x eval-buffer. (ou qualquer buffer, desde que não tenha nenhum outro código!).

Neste ponto, você carregou os pacotes e apenas os pacotes que está testando. Se você pode reproduzir o problema agora, pule para "Fornecendo uma receita de bug".

Etapa 2: Encontrando um bug no seu .emacs

Agora você confirmou que o problema está vindo de algo em sua configuração ("a chamada vem de dentro da casa!"). Sua configuração pode ter muitos milhares de linhas e pode carregar muitos arquivos diferentes. Para encontrar o problema, você fará uma pesquisa binária, comentando metade do código de cada vez para restringir as coisas. 1 1

  1. Abra seu emacs regular,, emacssem a -Qopção.
  2. Abra seu arquivo de configuração (normalmente ~/.emacsou .emacs.d/init.el, se você não encontrar, tente C-h v user-init-file)
  3. Selecione a primeira metade do arquivo: C-spacepara definir a marca, role para baixo até a metade para estender a região
  4. Comente a região selecionada M-;e salve o arquivo
  5. Abra um novo emacs (seu emacs de teste ), deixando o primeiro emacs em execução. O emacs de teste lerá a versão reduzida da sua configuração.
  6. Tente reproduzir o problema no emacs de teste
  7. Se você não conseguir reproduzi-lo, feche o emacs de teste e, no emacs original, undocomente o comentário C-/e comente metade do código restante. Abra um novo emacs de teste e tente novamente.
  8. Se você puder reproduzir o problema, comente a metade do código restante e veja se o problema persiste.
  9. Repita esse processo até encontrar o menor pedaço da sua configuração necessário para reproduzir o problema.

Se o seu problema está em um pacote específico, você terá que deixar o código que carrega esse pacote descomentado, é claro.

Se o seu arquivo de configuração carregar outros arquivos, você também poderá estender sua pesquisa nesses arquivos.

Neste ponto, você pode ter percebido que o problema ocorre devido a apenas uma ou duas linhas de código. Você pode até consertar você mesmo. Se sim, parabéns, você aprendeu alguma coisa! Caso contrário, avance para o passo três.

Etapa 3: Fornecendo uma receita de bug

Neste ponto, você deve poder fornecer uma receita detalhada de erros para postar aqui. Deve incluir:

  • Sua versão do Emacs (você pode obtê-lo no Emacs com M-x emacs-version
  • Seu sistema operacional (Windows #, Mac, distribuição Linux)
  • A versão do pacote que você está enfrentando, se aplicável
  • As etapas específicas necessárias para demonstrar o problema, incluindo o que você espera que aconteça e o que realmente acontece .

Por exemplo, eu posso postar uma pergunta como esta:

Estou tendo um problema com o modo super. Quando eu uso M-x sm-compile-code, ele faz um saque da minha conta do PayPal.

Passos para reproduzir:

Carregar super-modo:

(require 'package)
(setq package-load-list
      '((super-mode t)))
(package-initialize)
  • abra um novo arquivo com C-x C-f my-code
  • digite uma linha de código:
10 goto 10
  • ligar M-x sm-compile-code

Espero que isso invoque o supercompilador e compile meu programa. Em vez disso, vejo uma mensagem no minibuffer "$ 100 transferidos do paypal para o autor do modo super"

GNU Emacs 25.1.50.3
Debian Linux
Super-mode versão 3.1415


1 O pacote Bug Hunter pode ajudá-lo com isso, (semi-) dividindo automaticamente seu arquivo init.

Tyler
fonte
Talvez você possa mencionar The Bug Hunter .
Omar