2012-03-04 17 views
5

Estoy trabajando en un proyecto de software para Emacs que tiene algunas pruebas que se pueden ejecutar en modo batch para realizar pruebas de regresión rápidas. Sin embargo, cuando las pruebas fallan, los rastreos de pila en el terminal se cortan en la parte superior, por lo que tengo que ejecutar la prueba de falla nuevamente en una sesión interactiva de Emacs para ver el trance completo de la pila y descubrir dónde ocurrió realmente el error. ¿Hay alguna variable que pueda modificar que extienda la longitud máxima de las trazas de pila que Emacs imprime en el terminal en modo por lotes?¿Cómo puedo evitar que emacs corte los rastros de pila en el modo por lotes?

Si quieres un caso de prueba sencilla para producir un seguimiento de pila muy profundo que conseguirá cortado, aquí hay un caso trivial de recursividad infinita, que emacs abortará cuando alcanza una cierta profundidad:

emacs -Q -batch --eval '(defun f() (f))' -f toggle-debug-on-error -f f 

aquí está el exacta salida de ese comando en mi sistema:

Debug on Error enabled globally 
... 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    f() 
    command-line-1(("--eval" "(defun f() (f))" "-f" "toggle-debug-on-error" "-f" "f")) 
    command-line() 
    normal-top-level() 

en particular, cabe destacar que la línea después de Debug on Error enabled globally es en realidad una elipsis en la salida, no hay manera de ir más profundamente en el seguimiento de la pila sin ejecutar de forma interactiva.

+0

no es posible redirigir a un archivo.? – kindahero

+0

¿Qué tiene eso que ver con algo? El punto es que las puertas de salida estándar del modo playa no contienen la traza completa de la pila. Redirigirlo a un archivo no cambiará eso. –

Respuesta

2

Parece que debugger-batch-max-lines es lo que está buscando:

M-xcustomize-groupRET RETdebugger

(defcustom debugger-batch-max-lines 40 
    "Maximum lines to show in debugger buffer in a noninteractive Emacs. 
When the debugger is entered and Emacs is running in batch mode, 
if the backtrace text has more than this many lines, 
the middle is discarded, and just the beginning and end are displayed." 
    :type 'integer 
    :group 'debugger 
    :version "21.1") 
+0

Sí, eso lo solucionó. Gracias. –

Cuestiones relacionadas