clojure-russia

Работа и релокейт: #jobs-rus | #clojure-russia-offtop Телеграм-чат https://t.me/clojure_ru
asolovyov 2018-10-09T06:40:30.000100Z

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

razum2um 2018-10-09T07:10:51.000100Z

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

mike_ananev 2018-10-09T13:06:43.000100Z

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

👍 1
kirill.salykin 2018-10-09T13:29:48.000100Z

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

razum2um 2018-10-09T14:05:46.000100Z

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

potapenko 2018-10-09T14:18:24.000100Z

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

potapenko 2018-10-09T14:19:56.000100Z

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

potapenko 2018-10-09T14:21:09.000100Z

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

ag 2018-10-09T16:59:48.000100Z

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

ag 2018-10-09T17:06:34.000100Z

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

mike_ananev 2018-10-09T17:23:30.000100Z

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

fmnoise 2018-10-09T19:22:58.000100Z

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

fmnoise 2018-10-09T19:23:03.000100Z

тапы

fmnoise 2018-10-09T19:23:10.000100Z

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

1
fmnoise 2018-10-09T19:29:00.000100Z

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

fmnoise 2018-10-09T19:31:19.000100Z

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

kirill.salykin 2018-10-09T19:31:42.000100Z

ouch Latest commit ceb12cc on 19 Aug 2013

fmnoise 2018-10-09T19:32:08.000100Z

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

fmnoise 2018-10-09T19:32:58.000100Z

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

fmnoise 2018-10-09T19:35:10.000100Z

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

fmnoise 2018-10-09T19:35:46.000100Z

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

fmnoise 2018-10-09T19:36:38.000100Z

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

fmnoise 2018-10-09T19:37:39.000100Z

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

fmnoise 2018-10-09T19:39:32.000100Z

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

fmnoise 2018-10-09T19:41:01.000100Z

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

fmnoise 2018-10-09T19:41:28.000100Z

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

fmnoise 2018-10-09T19:43:02.000100Z

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

fmnoise 2018-10-09T19:43:45.000100Z

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

➕ 1
2
razum2um 2018-10-09T22:24:05.000100Z

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

razum2um 2018-10-09T22:31:30.000100Z

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

razum2um 2018-10-09T22:33:28.000100Z

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

razum2um 2018-10-09T22:40:31.000100Z

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