2009-08-24 7 views
23

He estado recibiendo aleatoriamente el siguiente error en emacs:-specpdl de tamaño máximo en emacs

profundidad de unión variable supera max-specpdl de tamaño

... y Lo he estado obteniendo en momentos muy aleatorios. Después de investigar esto, parece como si algún elfo en alguna parte estuviera recurriendo demasiado profundamente. ¿Hay alguna estrategia para rastrear esto? Estoy totalmente perdido en lo que realmente está causando esto.

He recibido algunos errores que indican algo parecido a la recursión infinita con ropemacs (pero estos suelen ser errores de Python). ¿Podría algo estar mal configurado con los ropemacs?

Actualización: Curiosamente, he encontrado que siempre obtengo este error si hago un "C-h a" para "barra de velocidad" pero no para "cuerda-".

Respuesta

16

Para rastrear el problema hacia abajo, puede intentar esto:

(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 

Usted debe conseguir una traza sobre el error, y en ese punto, se puede rastrear la rutina infractor.

También intentaría cargar emacs sin su archivo de configuración (emacs -q), para ver si hay algo en sus archivos .emacs que esté afectando las cosas. (No obtengo el bucle infinito usando C-h a). Y si es tu .emacs, entonces la mejor manera que he encontrado para rastrear eso es buscar binariamente (poner un error (error "frog") o algo así en el medio de tus .emacs, cargar, probar, si no hay problemas, poner el error en 3/4, de lo contrario, en 1/4, repetir ...), o evaluar manualmente su .emacs línea por línea (región por región), probando después de cada parte. Esos ajustes deberían ayudar.

+0

Por supuesto que no. Wish SO tenía una utilidad 'diff' mientras editaba, quería ver dónde me había entrometido. –

+0

Tuviste 'debug-on-errot'. Si hace clic en el enlace al lado editado (por ejemplo, 'hace 5 horas') sobre mi gravatar, puede ver la diferencia. ¿O te refieres a algo diferente? – seth

+0

Intenté esto y no funcionó: Bajé el valor a cinco y tuve la falla de depuración T, pero emacs no me colocó en el depurador: en su lugar, simplemente imprimió el mensaje de error habitual. Esto sucedió donde el error está en una función de sangría automática, ¿podría estar interfiriendo con la depuración en caso de error? –

2

Para mí tampoco funcionó. Encontré con C-h + v que en realidad max-specpdl-size no se cambió a 5 en absoluto por setq. Luego intenté configurarlo de manera interactiva con M-xset-variable. Eso tampoco cambió su valor. Finalmente me las arreglé para configurarlo con M-xcustomize-variable.

Por cierto, en mi sistema max-specpdl-size era 140 y por lo tanto a los pequeños. Tuve que aumentarlo a 1000, no para obtener un seguimiento y depurarlo, sino para que funcione.