2012-03-04 8 views
5

Sto lavorando ad un progetto software per Emacs che ha alcuni test che possono essere eseguiti in modalità batch per test rapidi di regressione. Tuttavia, quando i test falliscono, le tracce dello stack nel terminale sono troncate nella parte superiore, quindi devo eseguire nuovamente il test fallito in una sessione interattiva di Emacs per visualizzare lo stack trance completo e scoprire dove si è verificato effettivamente l'errore. C'è qualche variabile che posso modificare che estenderà la lunghezza massima delle tracce dello stack che Emacs stampa sul terminale in modalità batch?Come posso evitare che emacs cancelli le tracce dello stack in modalità batch?

Se si desidera un semplice banco di prova per la produzione di una traccia dello stack davvero profondo che andranno tagliati fuori, ecco un caso banale di ricorsione infinita, che Emacs interrompe quando raggiunge una certa profondità:

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

Ecco l'esatto uscita di quel comando sul mio 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() 

in particolare, si noti che la linea dopo Debug on Error enabled globally è in realtà i puntini di sospensione in uscita, non c'è modo di andare più in profondità in la traccia dello stack senza eseguire in modo interattivo.

+0

non è possibile reindirizzare a un file.? – kindahero

+0

Cosa c'entra questo con qualcosa? Il punto è che le porte di uscita standard in modalità spiaggia non contengono la traccia dello stack completo. Il reindirizzamento a un file non lo cambierà. –

risposta

2

Sembra debugger-batch-max-lines è quello che stai dopo:

M-xcustomize-groupRETdebuggerRET

(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ì, è stato risolto. Grazie. –

Problemi correlati