LINUX.ORG.RU

[Lisp,новичье] Отладка в slime


0

0

Время от времени на форуме проскакивают гневные крики анонимуса-лиспера о жалких людишках, нуждающихся в отладчике. Притом идут намеки на принципиальную разницу в процессах разработки, отладки, профайлинга и т.д. Так в чем же принципиальная разница (с точки зрения обычного сишного императивщика)? В минимизации сайд-эффектов? Особенно интересует именно отладка.
И к более земным вопросам: есть ли какие-нибудь параллели у sldb и gdb? Я нашел команды типа step, next etc, но как войти в режим отладки? У меня sldb вылезает только после неправильного действия. Допустим, я хочу просто пройти по функции с аргументами на момент падения, посмотреть переменные, трассировку.

Ответ на: комментарий от mv

Понятно, буду читать дальше -- до рестартов я еще не дошел. Довольно оригинальный способ. Напоминает вставку отладочного прерывания обычными отладчиками.

j-a-t-a
() автор топика
Ответ на: комментарий от j-a-t-a

(break) - это брейкпойнт и есть.

Вообще, нужда в классическом отладчике а-ля gdb в Коммон Лиспе практически отпадает, т.к. через REPL доступна живая, дышащая программа. Если использовать классический дебаггер неправильно, т.е. для анализа собственной, ещё недописанной программы, то львиную долю подобной работы в Лиспе можно сделать через REPL.

В контрибах SBCL, кстати, есть профайлер SB-PROF и code coverage - SB-COVER.

mv ★★★★★
()

Стек ты можешь увидеть (в том числе, и переменные), если ты упал в подсказку отладчика. Также есть trace, которая печатает аргументы и возвращаемое значение функции. Полноэкранного отладчика нет. Лично я не считаю это большим достоинством лиспа. Хотя написать полноэкранный отладчик было бы не совсем просто из-за макросов. Исходный код может переживать очень сложные преобразования перед тем, как будет скомпилирован в общепринятом смысле слова, и не всегда можно указать исходный код по точке исполнения однозначно. Хотя такие попытки были (lispdebug-jabberwocky), они почему-то не прижились. В коммерческих реализациях (Lispworks, Allegro) сделано больше, во всяком случае, в Lispworks экранный отладчик _иногда_ работает. В Slime можно только увидеть стек (и, по возможности, точку в коде, где происходит вызов). НО. Если ты упал в отладчик (например, вставив break), имеется полнофункциональная подсказка интерпретатора. В ней доступно ВСЁ. В gdb я не работал, но в MSVS и Delphi в отладчике возможности вычислений ограничены.

Например, ты можешь в сессии отладчика поменять любую функцию и перекомпилировать только её. Правда, это не подействует на тело, которое уже исполняется (стоит в стеке вызовов). На инлайн-вызовы это тоже не подействует. Во всяком случае, можно вызвать исправленную функцию заново, не перезапуская приложение.


den73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.