Как я могу запретить Emacs обрезать трассировки стека в пакетном режиме? - PullRequest
5 голосов
/ 05 марта 2012

Я работаю над программным проектом для Emacs, в котором есть несколько тестов, которые можно запустить в пакетном режиме для быстрого регрессионного тестирования.Однако, когда тесты не пройдены, трассировки стека в терминале обрезаются вверху, поэтому мне нужно снова запустить тест на неудачу в интерактивном сеансе Emacs, чтобы просмотреть транс в полном стеке и выяснить, где на самом деле произошла ошибка.Есть ли какая-нибудь переменная, которую я могу изменить, чтобы увеличить максимальную длину трассировок стека, которые Emacs выводит на терминал в пакетном режиме?

Если вы хотите, чтобы простой тестовый пример генерировал действительно глубокую трассировку стека, которая получитотрежьте, вот тривиальный случай бесконечной рекурсии, который emacs прервет, когда достигнет определенной глубины:

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

Вот вывод точного этой команды в моей системе:

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()

В частности, обратите внимание, что строка после Debug on Error enabled globally на самом деле является многоточием на выходе, нет способа углубиться в трассировку стека без интерактивного запуска.

1 Ответ

2 голосов
/ 15 марта 2012

Похоже, debugger-batch-max-lines - это то, что вы ищете:

Mx customize-group RET debugger RET

(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")
...