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?


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.


Talvez você possa mencionar The Bug Hunter .
Omar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.