Come posso risolvere i problemi di Emacs?


21

In una situazione in cui Emacs non si comporta come voglio, cosa posso fare per risolvere il problema? Quali passi posso prendere per trovare e risolvere il problema da solo?

O, in mancanza, come posso raccogliere informazioni utili affinché le persone qui (o sulla mailing list o su altri forum) possano aiutarmi con il mio problema?

My Emacs include molti pacchetti, una raccolta di frammenti copiati e incollati (o uccisi e strappati) da tutta Internet, e il mio elisp personalizzato, alcuni dei quali non ricordo di aver scritto o che non capisco più. C'è un modo per dare un senso a tutte queste complicazioni?


Non sono sicuro che questo sia il posto migliore per questo, ma ci sono molte domande che ottengono risposte / commenti che richiedono emacs -Qcome primo passo. L'ho scritto come qualcosa per collegare quelle domande a come aiuto generico per i nuovi utenti.
Tyler,

Sì, è il posto migliore per questo. In realtà, una domanda del genere è stata suggerita (quasi) 2 anni fa: meta.emacs.stackexchange.com/q/198/184 Grazie!
T. Verron,

Risposte:


28

Passaggio 1: in esecuzione emacs -Q

La prima cosa che devi fare è eseguire emacs senza nessuna delle tue personalizzazioni. Se riesci a riprodurre il problema in Emacs alla vaniglia, potrebbe essere effettivamente un bug in Emacs stesso. È raro, ma lo escludiamo come primo passo.

Se avvii Emacs dalla riga di comando con il -Qflag, ovvero, emacs -Qotterrai un emacs nudo o "vaniglia", senza nessuna delle personalizzazioni locali caricate. Il tuo problema si verifica ancora? In tal caso, passa a "Fornire una ricetta per i bug".

Passaggio 1b: cosa succede se il problema riguarda un pacchetto?

Se il tuo problema è specifico di un determinato pacchetto, ovviamente non puoi riprodurlo senza caricare quel pacchetto. Ma vuoi caricare solo il pacchetto in questione, non tutta la tua configurazione. Per farlo, esegui di emacs -Qnuovo e prepara uno script breve come il seguente:

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

Sostituisci package1con il nome del pacchetto che desideri caricare. Se è necessario caricare più pacchetti, modificare lo script di conseguenza:

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

Per caricare questo codice, è possibile incollarlo nel *scratch*buffer e chiamare M-x eval-buffer. (o qualsiasi buffer, purché non contenga altro codice!).

A questo punto, hai caricato i pacchetti e solo i pacchetti che stai testando. Se riesci a riprodurre il problema ora, passa a "Fornire una ricetta per i bug".

Passaggio 2: trovare un bug nel tuo .emacs

Ora hai confermato che il problema proviene da qualcosa nella tua configurazione ("la chiamata proviene dall'interno della casa!"). La configurazione può essere lunga molte migliaia di righe e può caricare molti file diversi. Per trovare il problema, esegui una ricerca binaria, commentando metà del codice alla volta per restringere le cose. 1

  1. Apri i tuoi emacs regolari emacs, senza l' -Qopzione.
  2. Apri il tuo file di configurazione (di solito ~/.emacso .emacs.d/init.el, se non riesci a trovarlo, prova C-h v user-init-file)
  3. Seleziona la prima metà del file: C-spaceper impostare il segno, scorri verso il basso a metà per estendere la regione
  4. Commenta la regione selezionata: M-;e salva il file
  5. Apri un nuovo emacs (i tuoi emacs di prova ), lasciando in esecuzione i primi emacs. test emacs leggerà la versione ridotta della tua configurazione.
  6. Prova a riprodurre il problema in test emacs
  7. Se non riesci a riprodurlo, chiudi test emacs e nel tuo emac originale undocommenta C-/e commenta metà del codice rimanente. Apri un nuovo test emacs e riprova.
  8. Se riesci a riprodurre il problema, commenta metà del codice rimanente e verifica se il problema persiste.
  9. Ripeti questo processo fino a trovare il minimo della tua configurazione necessaria per riprodurre il problema.

Se il tuo problema è con un pacchetto specifico, ovviamente dovrai lasciare il codice che carica quel pacchetto senza commenti.

Se il tuo file di configurazione carica altri file, potresti finire per estendere la tua ricerca anche in quei file.

A questo punto, potresti aver riscontrato che il problema è dovuto solo a una o due righe di codice. Potresti anche essere in grado di risolverlo da solo. In tal caso, congratulazioni, hai imparato qualcosa! Altrimenti, vai al passaggio tre.

Passaggio 3: fornire una ricetta per i bug

A questo punto, dovresti essere in grado di fornire una ricetta dettagliata dei bug da pubblicare qui. Dovrebbe includere:

  • La tua versione di Emacs (puoi scaricarla da Emacs con M-x emacs-version
  • Il tuo sistema operativo (Windows #, Mac, distribuzione Linux)
  • La versione del pacchetto con cui stai lottando, se applicabile
  • I passaggi specifici necessari per dimostrare il problema, incluso ciò che ti aspetti che accada e ciò che effettivamente accade .

Ad esempio, potrei pubblicare una domanda come questa:

Sto riscontrando un problema con la modalità super. Quando lo utilizzo M-x sm-compile-code, effettua un prelievo dal mio conto PayPal.

I passaggi per riprodurre:

Carica super-modalità:

(require 'package)
(setq package-load-list
      '((super-mode t)))
(package-initialize)
  • aprire un nuovo file con C-x C-f my-code
  • inserisci una riga di codice:
10 goto 10
  • chiamata M-x sm-compile-code

Mi aspetto che questo invochi il super-compilatore e compili il mio programma. Invece, vedo un messaggio nel minibuffer "$ 100 trasferiti da paypal all'autore in modalità super"

GNU Emacs 25.1.50.3
Debian Linux
Super-mode versione 3.1415


1 Il pacchetto Bug Hunter potrebbe aiutarti in questo, (semi-) bisecare automaticamente il tuo file init.


Forse potresti citare The Bug Hunter .
Omar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.