Установка точки останова в работающей программе Emacs Lisp

StackOverflow https://stackoverflow.com/questions/805292

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня проблема с пакетом Emacs lisp, который я извлек из дистрибутива Ubuntu.Пакет JDEE, и он жалуется на Args out of range: "63", 0, 4 в мини-буфере и *Messages* буфер всякий раз, когда я открываю файл.Об этой ошибке сообщалось в сентябре прошлого года, но никаких действий предпринято не было.Я не новичок в emacs, сам написал некоторый код на Elisp, но никогда не пытался отлаживать что-то подобное.Я хотел бы остановить загрузку файла в отладчике, когда произойдет эта ошибка, чтобы хотя бы понять, откуда возникла проблема.Я прочитал раздел 18.1.1 руководства Elisp «Вход в отладчик при ошибке», но пытаюсь загрузить файл после игры с различными комбинациями значений для debug-on-error, debug-ignored-errors, и debug-on-signal похоже, не имеет никакого эффекта.Есть ли у кого-нибудь предложения относительно моего следующего шага?

Это было полезно?

Решение

Если отладка при ошибке не работает, я бы начал с самого источника.Найдите сочетание клавиш/событие, вызывающее проблему, и найдите функцию.

C-h k <keystrokes>
M-x find-function <function-name-from-above>

Теперь, когда вы находитесь у источника

M-x edebug-defun

И в следующий раз, когда вы нажмете клавишу, вы сможете пройти программу.На этом этапе вы можете увидеть, какая часть вызывает ошибку, и углубиться в нее.

Вы также можете попробовать установить переменную 'stack-trace-on-error посмотреть, сможете ли вы найти виновника (хотя 'debug-on-error у меня обычно работает, не знаю, почему у вас нет).

В крайнем случае (если edebug-defun не работает), вы можете переопределить процедуру, вызвав (debug) в нем вроде то же самое.

Другие советы

Я полагаю, что JDEE каким-то образом препятствует отладке при ошибке.Возможно, grep просматривает свои файлы и выдает сообщение об ошибке «Args вне диапазона».Во время отладки обязательно загружайте нескомпилированный файл. .el файлы, а не скомпилированные побайтно .elc файлы (вы заметите это в отладчике, если используете байт-скомпилированный код), вводя такие команды, как (load "foo.el") вместо (load "foo").

Я получил ту же ошибку при использовании find-grep после случайного переопределения (current-time-string) в одном из моих собственных сценариев.

Используя M-x edebug-defun совет, опубликованный выше. Мне удалось найти проблему, когда я прошел через код, выдавая ошибку при просмотре вызова (current-time-string).

Не уверен, насколько это полезно в вашем случае.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top