#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)) где-нибудь над этой строкой? Эта функция гарантирует, что в вашей системе есть все отладочные данные, которые она может получить.