Я использую CounterClockWise для разработки моего первого проекта Clojure на ОС Windows 7. Помимо javascript (который я не слишком хорошо знаю), это мой первый динамически типизированный язык.Какие методы я могу использовать для отладки моего кода Clojure?
Самая сложная часть моего проекта заключалась в отладке проблем, которые у меня были. Техника, которую я использовал, заключается в том, чтобы посыпать println
s в местах, чтобы подтвердить, что мои входы и выходы - это то, что я хочу, чтобы они были.
По сравнению с Java, кажется, что многие функции Clojure принимают то, что я считаю вводом мусора, и с радостью возвращаю ноль. В результате исключение среды выполнения, которое вы видите, может исходить от многих функций от причины проблемы. Моя точка зрения, может быть трудно даже знать, куда положить println
.
И эти исключения во время выполнения выдавали скомпилированные номера строк кода, поэтому они не были очень информативными. Большинство моих функций были короткими и свободными от побочных эффектов, но проблема в том, что мои материалы были веб-страницами. Иногда вход в функцию был сырой html, иногда это был проанализированный html (по запросу), иногда это был список ссылок (с помощью css-подобного селектора на анализируемом html). Эти входы могут быть глубоко вложенными, сложными структурами (т. Е. Списком карт карт списков карт), поэтому их было непросто собрать вручную. Когда у вас есть трассировка стека, которая не указывает на проблему, мне бы очень пришлось отлаживать половину моей программы и выяснить, как создавать входы для каждой части. Это заняло много времени.
На IRC-канале кто-то сообщил мне об stacktrace library, который значительно облегчил отладку. Он все еще указывал на многие функции от источника плохого ввода, но он по-прежнему был полезен. Я ищу больше таких методов. Какие методы я могу использовать для более эффективного отладки моего кода?
Я ответил на это в OP, см. Мое обновление. Спасибо –
Несомненно, в этом случае вы описали, что использование отладчика из IntelliJ IDEA может быть лучшим решением. Вы также можете отслеживать свои вызовы функций с помощью пакета clojure.tools.trace, но если аргументы ввода/вывода являются большими, я не думаю, что он был бы читабельным. –