Отладка сидра - как оценить вещи во время отладки
Инструкции по отладке сидра говорят мне, что я могу нажать e
оценить что-то во время отладки. Это дает мне небольшое пространство в одну строку в мини-буфере Emacs внизу.
Есть ли способ переключиться на полный REPL во время отладки функции с доступом ко всем локальным пользователям и т. Д.? В настоящее время REPL зависает / блокируется во время отладки. Я думаю о чем-то в стиле того, как PyCharm или Matlab разрешают полный REPL, находясь в середине чего-то.
2 ответа
Похоже, что задействованный REPL связан во время отладки. Но есть несколько вариантов, доступных через отладчик, которые могут дать вам почти столько же, сколько вы получили бы из REPL. Удобный, чтобы вj
Введите новое значение для результата, который вы собираетесь получить. Таким образом, вы на самом деле меняете данные на лету.
Вы можете просмотреть полный список локальных переменных сl
, Тогда смотрите больше о VAR сINp
и указать, какие именно.
Вы также можетеe
val, чтобы ввести произвольное выражение, как в REPL (как вы упомянули). Кажется, это полный REPL, состоящий из одной строки, с историей, редактированием и т. Д. Есть ли что-то, что вы хотели бы сделать в REPL, с которым вы не можете делать e
или открыть с l
или же p
?
Одна вещь, которая меня расстраивает, это то, что я не могу отредактировать функцию, пока отладчик остановлен на указанной функции, затем отредактировать ее и снова запустить с начальными аргументами. В cider, если вы попытаетесь отредактировать отлаживаемую функцию, emacs откроет отладчик в новом буфере с исходным кодом. Кроме того, у вас есть e
команда, которая убирает вещи в минибуфере, что я не считаю большим опытом. Самое близкое, к чему я пришел, это следующее:
Представьте, что у вас есть какая-то функция, которая вылетает, и вам нужно отладить:
(defn some-fn
[complex-data more-data]
; block of code with some bug
)
Я создам атомы в пространстве имен и установлю значение внутри данной функции:
(def c (atom nil))
(def d (atom nil))
(defn some-fn
[complex-data more-data]
(reset! c complex-data)
(reset! d more-data)
; block of code with some bug
)
Тогда я просто повторюсь some-fn
используя арги, которые у меня теперь есть в пространстве имен.
(some-fn @c @d)
Я думаю, что это гораздо лучший подход, чем использование команды eval и минибуфера из отладчика сидра.