@razum2um а ты хочешь что-то типа pdb получить? или что такое "полноценный дебаггер"?
заюзать jvm ный JPDA
@razum2um можешь привести кейс, когда понадобился дебагер? мне за 5 лет он понадобился ровно 1 раз, когда я принимал ring запрос и мне нужно было в точке приема его поймать и посмотреть внутрь. во всех остальных случаях repl + либы по отладке (dbgn и т.д.) но этот кейс возник ровно потому, что надо код лучше организовывать...
а чем либы по отладке (dbgn) отличаются от дебагера?
@mike1452 @kirill.salykin в принципе всегда можно сказать, что можно обойтись принтами или например tools.trace. есть еще вариант засовывания локального состояние в какой нибудь глобальный атом, но по мне во-первых вывод глубоких структур не всегда читабелен. это на том, что влезает в 1 строку tools.trace/dbgn выглядят sexy… может быть дело еще в мышлении. я ленивый и не хочу держать в голове много сразу - увидел кусок - принял решение - посмотрел дальше (не сторонник долгого сосредоточенного взгляда на код. проще сэмулировать ситацию тестом, быстрее запустить и смотреть изнутри, имхо) Например, я в брейкпойнтах обычно дергаю какие нибудь части, причем этот процесс обычно последовательный - посмотрел 1 ветку, потом на основании этого другую итд. с уточняющими принтами такой feedback loop дольше и между перезапусками размывается контекст в голове и есть 2й пункт, хз насколько распространенный, но для меня важный. хороший дебаггер дает возможность быстро изучить минимально необходимые внутренности либ, чтобы лучше понять процесс. например в свое время я копался в кишках рельсы именно через step-in в дебаггере
В Cider прекрасный дебагер - пишем #dbg
в функции и вперед....
Я как раньше дебагером не пользоватлся в той же джаве, считал это не спортивно... а вот REPL + дебаг очень даже органично получились.
а посмотреть значение - inspect
тоже полуюбил - просто и наглядно
А еще Sayid… сам не пробовал (нужды не было) но по демкам вроде крутая штука
кстати скоро будут доступны видео со StrangeLoop там Стю Халловей показывал свой ворквлов https://www.youtube.com/channel/UC_QIfHvN9auy2CoOdSfMWDw
@razum2um Есть стандартный дебагер в IDEA. Он работает в Clojure коде, но больше полезен для отладки interop в Java. Есть дебагер в Cider. Он заточен на CLojure, очень здорово позволяет отлаживать именно Clojure-ный код. Этих 2х дебагеров нам хватало за глаза. Но и то в редких случаях. При должной сноровке REPL + отладочный вывод + тесты приводят к тому, что дебагер нужен очень редко.
так жеж эта, prepl же
тапы
Рич уже все придумал
я пока правда не сильно понял идею, но вроде как для дебага должно ехать
но согласен с @razum2um иногда хочется бряку поставить и посмотреть шо там происходит, я обычно https://github.com/georgejahad/debug-repl для этой цели использую
ouch Latest commit ceb12cc on 19 Aug 2013
а там свежих и не надо, кложура же
написано единожды, работает всегда
а насчет стандартного дебаггера в идее, идея сама по себе очень на любителя)
а #dbg сидровский тоже не все ситуации покрывает
иногда надо забуриться в кусок кода в работающем приложении в конкретной ситуации когда что-то там не то шо надо
и тут конечно (when (nil? foo) (dbg))
работает
но я вот уже наверное больше года не юзаю, и как-то обхожусь
после рельсов было труднее всего, там binding.pry
с космическими возможностями по исследованию кода
и приходишь в кложуру, а тут вообще не принято это дело
и сразу руки тянутся дебаггер написать
@razum2um признавайся, тоже ломка по pry? :troll:
> с космическими возможностями по исследованию кода this. как раз 2й пункт
> debug-repl
дык https://github.com/razum2um/clj-debugger это оно же чуть-чуть расширенное - показывает контекст, может немного скипать, кто-то мне добавил подключение к тредам 🙂 но внутри это тупо clojure.main/repl который, да, :rich: но оно не умеет ни шагать, ни show-source/$
(clojure.repl/source? нуну) и это.. мы все привыкли к плюшкам типа reply, rebel-readline. там всего этого нет. хотя break-catch я юзаю до сих пор когда импортирую разную невалидную хрень и что-то отваливается посреди процесса
ну и с таким именем опять стыдно, что не стандарт дефакто. кстати, году в 15 cider юзал именно это, но сейчас я посмотрел - они все самостоятельно переписали
кстати, в clojure.main/repl у меня возникали претензии еще и тут https://github.com/clojure/clojure/blob/master/src/clj/clojure/main.clj#L277L278