Как отладить ошибки компилятора LISP в LispBox? - PullRequest
2 голосов
/ 09 февраля 2012

Я установил LispBox на Windows, и он работает отлично.Однако у меня есть некоторые проблемы с отладкой кода: когда я пытаюсь скомпилировать код, который содержит ошибку, такую ​​как синтаксическая ошибка, вывод сообщения об ошибке (напечатанный ниже) не очень полезен.Компиляция

"d:/Jervis/Documents/Programming/LISP/hw1.lisp"
   [Condition of type SIMPLE-ERROR]
  0: (CCL::%COMPILE-FILE "d:/Jervis/Documents/Programming/LISP/hw1.lisp" "d:/Jervis/Documents/Programming/LISP/hw1.wx64fsl" T NIL T T NIL T :DEFER NIL #<BACKEND WIN64 #x21001C6FCD> :DEFAULT NIL 0)
  1: (COMPILE-FILE #P"d:/Jervis/Documents/Programming/LISP/hw1.lisp" :OUTPUT-FILE #P"d:/Jervis/Documents/Programming/LISP/hw1.wx64fsl" :VERBOSE T :PRINT NIL :LOAD NIL :FEATURES NIL :TARGET :WIN64 :SAVE-LOC..
  2: (SWANK-BACKEND:CALL-WITH-COMPILATION-HOOKS #<CCL:COMPILED-LEXICAL-CLOSURE (:INTERNAL SWANK-BACKEND:SWANK-COMPILE-FILE) #x2100C2730F>)
  3: ((:INTERNAL SWANK:COMPILE-FILE-FOR-EMACS))
  • Кто-нибудь знает, как получить номер строки кода, который вызывает ошибки компиляции?1010 * здесь открытия буфера Compiler Input , но это не сработало.(Буфер был недоступен и поэтому не мог быть открыт).

    Есть идеи?

1 Ответ

0 голосов
/ 09 февраля 2012

Сначала пояснение: упомянутый вами буфер * Compiler Input * не имеет ничего общего с Common Lisp и Slime, он касается ошибок, с которыми Emacs сталкивался при компиляции Emacs Lisp (его внутренний lisp, сильно отличается от CL).

Что касается вашей проблемы (определение имени файла / номера строки, чтобы сузить проблему): когда я ввожу в файл сломанный фрагмент кода (скажем, test.lisp):

(defun fact (n)
  (if (= 0 n)
  1
  !(* n (facto (1- n)))))

,затем попробуйте отправить его в CCL через Slime, нажав C-c C-k в буфере test.lisp, я получаю сообщение об ошибке и список перезапусков (ниже списка перезапусков есть также обратный след, аналогичный тому, который вы получили).Выберите restart 0, нажав 0, затем 'n', чтобы не загружать сломанный скомпилированный файл в CCL.Буфер с ошибкой должен быть заменен буфером с именем * slime-compilation *, который в моем случае содержит:

cd d:/tmp/lispbox-0.7/
2 compiler notes:

test.lisp:2:5:
  warning: Extra arguments in (IF (= 0 N) 1 ! (* N (FACTO (1- N)))) don't match lambda list (CCL::TEST CCL:TRUE &OPTIONAL CCL:FALSE).
  style-warning: Unused lexical variable N

Compilation failed.

, который выглядит так, как вы хотели.

Моя рукадля установки Linux CL не нужно выбирать перезапуск 0, а также есть настройка слизи , чтобы избежать запроса «загрузить файл fasl в любом случае (да / нет)», так что опыт может быть улучшен с некоторой настройкой.

...