2009-08-24 11 views
23

Ho casualmente ottenere il seguente errore in emacs:Rintracciare errori max-specpdl dimensioni in emacs

variabile profondità di legame supera max-specpdl-size

... e L'ho preso in momenti molto casuali. Dopo aver studiato questo, sembra che qualche elis da qualche parte stia ricoprendo troppo profondamente. Ci sono delle strategie per rintracciarlo? Sono totalmente a corto di ciò che sta effettivamente causando questo.

ho ottenuto alcuni errori che indicano qualcosa sulla falsariga di ricorsione infinita con ropemacs (ma questi di solito sono errori di Python). Qualcosa potrebbe essere configurato male con ropemacs?

Aggiornamento: Abbastanza interessante, ho trovato che ho sempre ottenere questo errore se faccio un "C-h un" per "speed", ma non per "rope-".

risposta

16

per monitorare il problema verso il basso, si può provare questo:

(setq max-specpdl-size 5) ; default is 1000, reduce the backtrace level 
(setq debug-on-error t) ; now you should get a backtrace 
C-h a ; in speedbar 

si dovrebbe ottenere un backtrace su l'errore e, a quel punto, è possibile rintracciare la routine incriminato.

Vorrei anche provare a caricare emacs senza il file di configurazione (emacs -q), per vedere se c'è qualcosa nel tuo .emac che sta influenzando le cose. (Non ho il ciclo infinito usando C-h a). E se è il tuo .emacs, allora il modo migliore che ho trovato per tenere traccia che verso il basso è o ricerca binaria (mettere un errore (error "frog") o somesuch nel bel mezzo dei vostri .emacs, carico, test, se nessun problema, mettere l'errore a 3/4, altrimenti a 1/4, ripeti ...), o valuta manualmente il tuo .emacs riga per riga (regione per regione), testando dopo ogni porzione. Queste impostazioni dovrebbero aiutare.

+0

Ovviamente no. Wish SO ha avuto un'utilità "diff" durante il montaggio, volevo vedere dove mi sono arrovellato. –

+0

Hai avuto 'debug-on-errot'. Se fai clic sul link accanto a modificato (ad esempio "5 ore fa") sopra il mio gravatar, puoi vedere la differenza. O intendi qualcosa di diverso? – seth

+0

Ho provato questo e non ha funzionato: ho girato il valore fino a cinque e aveva debug-on-error T, ma emacs non mi entrare nel debugger: invece appena stampato il messaggio di errore al solito. Questo è successo dove l'errore si trova in una funzione di auto-indentazione, potrebbe interferire con il debug-on-error? –

2

Anche per me non ha funzionato. Ho trovato con C-h + v che in realtà max-specpdl-size non è stato modificato in . Ho quindi cercato di impostare in modo interattivo con M-xset-variable. Anche questo non ha cambiato il suo valore. Finalmente sono riuscito a impostare con M-xcustomize-variable.

Btw, sul mio sistema max-specpdl-size era 140 e quindi in piccolo. Ho dovuto aumentarlo a 1000, non per ottenere un backtrace e debuggarlo, ma per farlo funzionare.

Problemi correlati