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 -Q
bandeira, ou seja, emacs -Q
obterá 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 -Q
novamente e prepare um script curto, como o seguinte:
(require 'package)
(setq package-load-list
'((package1 t)))
(package-initialize)
Substitua package1
pelo 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
- Abra seu emacs regular,,
emacs
sem a -Q
opção.
- Abra seu arquivo de configuração (normalmente
~/.emacs
ou .emacs.d/init.el
, se você não encontrar, tente C-h v user-init-file
)
- Selecione a primeira metade do arquivo:
C-space
para definir a marca, role para baixo até a metade para estender a região
- Comente a região selecionada
M-;
e salve o arquivo
- 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.
- Tente reproduzir o problema no emacs de teste
- Se você não conseguir reproduzi-lo, feche o emacs de teste e, no emacs original,
undo
comente o comentário C-/
e comente metade do código restante. Abra um novo emacs de teste e tente novamente.
- Se você puder reproduzir o problema, comente a metade do código restante e veja se o problema persiste.
- 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.
emacs -Q
como primeiro passo. Eu escrevi isso como algo para vincular essas perguntas a uma ajuda genérica para novos usuários.