Fork me on GitHub
#clojure-russia
<
2018-10-09
>
asolovyov06:10:30

@razum2um а ты хочешь что-то типа pdb получить? или что такое "полноценный дебаггер"?

razum2um07:10:51

заюзать jvm ный JPDA

mike145213:10:43

@razum2um можешь привести кейс, когда понадобился дебагер? мне за 5 лет он понадобился ровно 1 раз, когда я принимал ring запрос и мне нужно было в точке приема его поймать и посмотреть внутрь. во всех остальных случаях repl + либы по отладке (dbgn и т.д.) но этот кейс возник ровно потому, что надо код лучше организовывать...

kirill.salykin13:10:48

а чем либы по отладке (dbgn) отличаются от дебагера?

razum2um14:10:46

@mike1452 @kirill.salykin в принципе всегда можно сказать, что можно обойтись принтами или например tools.trace. есть еще вариант засовывания локального состояние в какой нибудь глобальный атом, но по мне во-первых вывод глубоких структур не всегда читабелен. это на том, что влезает в 1 строку tools.trace/dbgn выглядят sexy… может быть дело еще в мышлении. я ленивый и не хочу держать в голове много сразу - увидел кусок - принял решение - посмотрел дальше (не сторонник долгого сосредоточенного взгляда на код. проще сэмулировать ситацию тестом, быстрее запустить и смотреть изнутри, имхо) Например, я в брейкпойнтах обычно дергаю какие нибудь части, причем этот процесс обычно последовательный - посмотрел 1 ветку, потом на основании этого другую итд. с уточняющими принтами такой feedback loop дольше и между перезапусками размывается контекст в голове и есть 2й пункт, хз насколько распространенный, но для меня важный. хороший дебаггер дает возможность быстро изучить минимально необходимые внутренности либ, чтобы лучше понять процесс. например в свое время я копался в кишках рельсы именно через step-in в дебаггере

potapenko14:10:24

В Cider прекрасный дебагер - пишем #dbg в функции и вперед....

potapenko14:10:56

Я как раньше дебагером не пользоватлся в той же джаве, считал это не спортивно... а вот REPL + дебаг очень даже органично получились.

potapenko14:10:09

а посмотреть значение - inspect тоже полуюбил - просто и наглядно

ag16:10:48

А еще Sayid… сам не пробовал (нужды не было) но по демкам вроде крутая штука

ag17:10:34

кстати скоро будут доступны видео со StrangeLoop там Стю Халловей показывал свой ворквлов https://www.youtube.com/channel/UC_QIfHvN9auy2CoOdSfMWDw

mike145217:10:30

@razum2um Есть стандартный дебагер в IDEA. Он работает в Clojure коде, но больше полезен для отладки interop в Java. Есть дебагер в Cider. Он заточен на CLojure, очень здорово позволяет отлаживать именно Clojure-ный код. Этих 2х дебагеров нам хватало за глаза. Но и то в редких случаях. При должной сноровке REPL + отладочный вывод + тесты приводят к тому, что дебагер нужен очень редко.

fmnoise19:10:58

так жеж эта, prepl же

fmnoise19:10:10

Рич уже все придумал

fmnoise19:10:00

я пока правда не сильно понял идею, но вроде как для дебага должно ехать

fmnoise19:10:19

но согласен с @razum2um иногда хочется бряку поставить и посмотреть шо там происходит, я обычно https://github.com/georgejahad/debug-repl для этой цели использую

kirill.salykin19:10:42

ouch Latest commit ceb12cc on 19 Aug 2013

fmnoise19:10:08

а там свежих и не надо, кложура же

fmnoise19:10:58

написано единожды, работает всегда

fmnoise19:10:10

а насчет стандартного дебаггера в идее, идея сама по себе очень на любителя)

fmnoise19:10:46

а #dbg сидровский тоже не все ситуации покрывает

fmnoise19:10:38

иногда надо забуриться в кусок кода в работающем приложении в конкретной ситуации когда что-то там не то шо надо

fmnoise19:10:39

и тут конечно (when (nil? foo) (dbg)) работает

fmnoise19:10:32

но я вот уже наверное больше года не юзаю, и как-то обхожусь

fmnoise19:10:01

после рельсов было труднее всего, там binding.pry с космическими возможностями по исследованию кода

fmnoise19:10:28

и приходишь в кложуру, а тут вообще не принято это дело

fmnoise19:10:02

и сразу руки тянутся дебаггер написать

fmnoise19:10:45

@razum2um признавайся, тоже ломка по pry? troll

razum2um22:10:05

> с космическими возможностями по исследованию кода this. как раз 2й пункт

razum2um22:10:30

> debug-repl дык https://github.com/razum2um/clj-debugger это оно же чуть-чуть расширенное - показывает контекст, может немного скипать, кто-то мне добавил подключение к тредам 🙂 но внутри это тупо clojure.main/repl который, да, rich но оно не умеет ни шагать, ни show-source/$ (clojure.repl/source? нуну) и это.. мы все привыкли к плюшкам типа reply, rebel-readline. там всего этого нет. хотя break-catch я юзаю до сих пор когда импортирую разную невалидную хрень и что-то отваливается посреди процесса

razum2um22:10:28

ну и с таким именем опять стыдно, что не стандарт дефакто. кстати, году в 15 cider юзал именно это, но сейчас я посмотрел - они все самостоятельно переписали

razum2um22:10:31

кстати, в clojure.main/repl у меня возникали претензии еще и тут https://github.com/clojure/clojure/blob/master/src/clj/clojure/main.clj#L277L278