Установка точки останова на работающей программе Emacs Lisp - PullRequest
1 голос
/ 30 апреля 2009

У меня проблема с lisp-пакетом Emacs, который я вытащил из дистрибутива 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, похоже, эффект. Кто-нибудь получил какие-либо предложения для моего следующего шага?

Ответы [ 3 ]

6 голосов
/ 30 апреля 2009

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

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), что-то вроде того же.

0 голосов
/ 05 января 2011

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

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

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

0 голосов
/ 30 апреля 2009

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

...