@razum2um а ты хочешь что-то типа pdb получить? или что такое "полноценный дебаггер"?
заюзать jvm ный JPDA
@razum2um можешь привести кейс, когда понадобился дебагер? мне за 5 лет он понадобился ровно 1 раз, когда я принимал ring запрос и мне нужно было в точке приема его поймать и посмотреть внутрь. во всех остальных случаях repl + либы по отладке (dbgn и т.д.) но этот кейс возник ровно потому, что надо код лучше организовывать...
1👍а чем либы по отладке (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 же
тапы
Рич уже все придумал
1я пока правда не сильно понял идею, но вроде как для дебага должно ехать
но согласен с @razum2um иногда хочется бряку поставить и посмотреть шо там происходит, я обычно https://github.com/georgejahad/debug-repl для этой цели использую
ouch Latest commit ceb12cc on 19 Aug 2013
а там свежих и не надо, кложура же
написано единожды, работает всегда
а насчет стандартного дебаггера в идее, идея сама по себе очень на любителя)
а #dbg сидровский тоже не все ситуации покрывает
иногда надо забуриться в кусок кода в работающем приложении в конкретной ситуации когда что-то там не то шо надо
и тут конечно (when (nil? foo) (dbg))
работает
но я вот уже наверное больше года не юзаю, и как-то обхожусь
после рельсов было труднее всего, там binding.pry
с космическими возможностями по исследованию кода
и приходишь в кложуру, а тут вообще не принято это дело
и сразу руки тянутся дебаггер написать
> с космическими возможностями по исследованию кода 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