Отладка Lisp и SLIME, ошибка «Не удается найти исходное местоположение»

#emacs #lisp #common-lisp #slime #sbcl

#emacs #lisp #common-lisp #slime #sbcl

Вопрос:

Я написал код с ошибками.

Пример:

 (print (/ 1 0))
  

Я пытаюсь скомпилировать с помощью C-c C-c.
И перехватите ошибку с помощью фрейма стека.

Я хочу увидеть строку в коде, где произошла ошибка. Нажал «v» на строке во фрейме стека и обнаружил ошибку.

 Error: Cannot find source location for: #<COMPILED-CODE-LOCATION 
(SB-C::VARARGS-ENTRY /)>  
  

Как я могу перейти к строке в моем коде?

Скриншот: введите описание изображения здесь

Комментарии:

1. Что вы имеете в виду, говоря, что вы компилируете с помощью C-c C-c? Привязана ли эта комбинация клавиш к slime-compile-file?

2. C-c C-c — Скомпилируйте форму верхнего уровня в точке.

Ответ №1:

Как вы можете видеть из ошибки, строка, к которой вы хотите перейти, находится где-то в пакете SB-C , который является частью SBCL. Если у вас нет источников SBCL (вы установили двоичный файл или удалили их), вы должны получить их (соответствующие вашей текущей версии SBCL), а затем связать их .sbclrc следующим образом (в соответствии с http://www.cliki.net/SLIME Features ):

 (setf (logical-pathname-translations "SYS") 
      '(("SYS:SRC;**;*.*.*" #P"/opt/sbcl/src/**/*.*")
        ("SYS:CONTRIB;**;*.*.*" #P"/opt/sbcl/contrib/**/*.*")))
  

Или просто скомпилируйте SBCL из исходного кода, и он будет знать, где они находятся.

Комментарии:

1. Извините, я в замешательстве и не добавляю исправьте ошибку, я ее исправляю.

2. В любом случае, решение должно быть таким же.

3. Настройте (sb-ext:set-sbcl-source-location «/path/to/sbcl/source/») в .sbclrc. Источник: поиск ссылки на источники SBCL

Ответ №2:

У вас есть (proclaim ‘(optimize debug)) где-нибудь над этой строкой? Эта функция гарантирует, что в вашей системе есть все отладочные данные, которые она может получить.