Отслеживание ошибок max-specpdl-size в emacs - PullRequest
28 голосов
/ 24 августа 2009

Я случайно получил следующую ошибку в emacs:

Переменная глубина связывания превышает max-specpdl-size

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

Я получил некоторые ошибки, указывающие на что-то вроде бесконечной рекурсии с помощьювеков (но обычно это ошибки Python). Может ли что-то быть неправильно настроено с помощью Romamacs?

Обновление : Интересно, что я обнаружил, что всегда получаю эту ошибку, если я делаю "C-h a" для "speedbar", но не для "веревки -".

Ответы [ 2 ]

21 голосов
/ 24 августа 2009

Чтобы отследить проблему, вы можете попробовать это:

(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

Вы должны получить обратный след после ошибки, и в этот момент вы можете отследить нарушающую процедуру.

Я бы также попытался загрузить emacs без вашего файла конфигурации (emacs -q), чтобы посмотреть, есть ли что-то в вашем .emacs, что влияет на вещи. (Я не получаю бесконечный цикл, используя C-h a). И если это ваш .emacs, то лучший способ отыскать это - бинарный поиск (поместить ошибку (error "frog") или что-то в середине вашего .emacs, загрузить, протестировать, если нет проблем, поставить ошибка в 3/4, в противном случае в 1/4, повторите ...), или вручную оцените ваш .emacs построчно (регион за регионом), тестируя после каждой порции. Эти настройки должны помочь.

3 голосов
/ 10 октября 2012

у меня тоже не получилось. С C-h + v я обнаружил, что на самом деле max-specpdl-size не был изменен на 5 вообще setq. Затем я попытался установить его в интерактивном режиме с помощью М-х set-variable. Это тоже не изменило его значение. Наконец мне удалось установить его с помощью M-x customize-variable.

Кстати, в моей системе max-specpdl-size был 140 и, таким образом, для малого. Мне пришлось увеличить его до 1000, не для того, чтобы получить обратную трассировку и отладку, а чтобы заставить его работать.

...