Come eseguire il debug degli errori nelle sentinelle e durante il blocco dei caratteri


10

Quando si verifica un errore all'interno di una sentinella di processo o durante il blocco dei caratteri, Emacs non mostra una backtrace anche se debug-on-errorera precedentemente abilitata.

Capisco perché questi errori vengono rilevati, lo stesso errore potrebbe essere nuovamente attivato mentre si tenta di presentare la backtrace. Tuttavia, quando voglio effettivamente eseguire il debug di tale errore non è molto utile. Preferirei rischiare che Emacs non rispondesse piuttosto che dover lavorare da questo:

error in process sentinel: Wrong type argument: stringp, nil

Dopo tutto, posso solo iniziare una seconda istanza, se la prima inizia a impazzire. Un po 'più di contesto aiuterebbe quando ci sono molti luoghi in cui un simile errore potrebbe teoricamente verificarsi in una sentinella.

Quindi, come posso forzare Emacs a mostrare un backtrace anche nei casi in cui debug-on-errornon ha effetto?


1
Ho visto emacs.stackexchange.com/questions/3552/… ma penso che dovrebbe esserci una domanda su questo in generale, non solo un caso particolare. Inoltre spero davvero che "usa printf" non sia l'unica risposta, perché è quello che ho usato in passato e non è soddisfacente, soprattutto se l'errore è "Riferimento viso non valido: some-face-che-io-assolutamente-so -exists ", che potrebbe essere attivato praticamente da ogni pacchetto che ho installato.
tarsius

L'URL punta a questa domanda ed è quindi piuttosto confuso nel tuo commento, è intenzionale o un errore per tuo conto?
Wasamasa,

Questo è il problema che intendevo: ttp: //emacs.stackexchange.com/questions/1045/how-to-debug-startup-problem-if-debug-init-has-no-effect
tarsius

il link tarsius intendeva: emacs.stackexchange.com/questions/1045/… ‌ ug-init-non-ha-effetto
dcorking

Risposte:


10

Per le sentinelle di processo, non credo che ci sia una buona ragione. IOW Penso che sia solo una caratteristica mancante, quindi ti consiglio M-x report-emacs-bug.

Per il blocco dei caratteri, il problema è più complicato perché ciò che realmente accade è che l'errore viene generato durante il jit-lock, cioè durante il redisplay, e non possiamo facilmente inserire il debugger in quel momento (IIRC a un certo punto Gerd ha provato a fare funziona, ma c'erano ancora alcuni problemi seri). Quindi è possibile eseguire il debug in uno dei seguenti modi:

  • M-x jit-lock-debug-mode che modifica jit-lock per essere eseguito subito dopo la visualizzazione, in modo da poter inserire il debugger.
  • M-: (setq font-lock-support-mode nil) RETe quindi disabilitare + riattivare font-lock. In questo modo font-lock non utilizza più jit-lock, quindi viene eseguito durante il comando dell'utente anziché durante la visualizzazione successiva.

In realtà, debug-on-errorsembra funzionare bene sulle sentinelle di processo.
Stefan,

@tarsius - pubblica un link al tuo problema con i
debug

La richiesta di funzionalità di tarsius è 19432 dove è contrassegnata come non riproducibile. Stefan Monnier ha pubblicato una soluzione alternativa che utilizza --evalanziché --debug-init . Anche la sua soluzione alternativa non mi aiuta a tornare indietro nel mio attuale.emacs.d
dcorking

1
@dcorking: no, nel bug # 19432, non ho postato una "soluzione alternativa" ma un tentativo fallito di riprodurre il suo bug. Perché non invii una ricetta per riprodurre il tuo problema?
Stefan,
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.