Привет, коллеги!
Статья перед выходными :)
Всем известный факт: при работе над проектом любой сложности возникает потребность в отладке кода. Сложный, простой -- нет разницы, всегда есть вариант что-то написать не так.
Поскольку в наше время большая редкость проект состоящий из нескольких файлов, то и непосредственно компилятором scalac никто код не компилирует.
В среде Scala стандартом де-факто для сборки является SBT (Simple Build Tool) http://www.scala-sbt.org/
При ошибках компиляции (кода или тестов) или выполнения SBT пишет лог в консоль (и в массу каких-то своих внутренних файлов). Лога часто бывает недостаточно для того чтобы разобраться в том что не работает и почему (где -- еще более-менее понятно).
Самый удобный способ отладиться (если, конечно, у вас есть доступ к исходникам (хотя и без таковых, часто)) это запустить отладчик в той IDE, с которой вам работается привычнее. У меня -- это Intellij IDEA (для нее есть плагин поддерживающий Scala) и делающий кодирование на Scala если и не идеально удобным, то покрайней мере удобнее многих известных мне IDE.
Стандарт для отладки в Java (а Scala с ней неразрывно связана) -- это JPDA.
Поскольку SBT -- это всего-навсего Java-программа, то и все что надо сделать -- это запустить VM с нужными параметрами:
Лучшее место куда можно положить строки выше находится в файле sbtconfig.txt
Все -- запускайте SBT (через sbt.bat или просто sbt в зависимости от вашей ОС):
Напишите к примеру: run (чтобы запустить приложение)
Перед этим, в своей IDE, поставьте break point на той строке, которая сможет вызваться в результате комманды выше.
Запустите отладчик в IDE (как правило в Intellij IDEA доп. настроек не требуется).
По достижению нужного участка кода отладчик остановится на нужной строке (показывая данные о переменных и т.п.)
Отладка работать будет, но если, к примеру, поставить точку отладки в функции, то окружающие переменные часто будут иметь не совсем те значения, на которые вы рассчитывали (сказывается природа того, что Scala базируется на Java (функции -- это анонимные внутренние классы во всеми вытекающими последствиями).
Статья перед выходными :)
Всем известный факт: при работе над проектом любой сложности возникает потребность в отладке кода. Сложный, простой -- нет разницы, всегда есть вариант что-то написать не так.
Поскольку в наше время большая редкость проект состоящий из нескольких файлов, то и непосредственно компилятором scalac никто код не компилирует.
В среде Scala стандартом де-факто для сборки является SBT (Simple Build Tool) http://www.scala-sbt.org/
При ошибках компиляции (кода или тестов) или выполнения SBT пишет лог в консоль (и в массу каких-то своих внутренних файлов). Лога часто бывает недостаточно для того чтобы разобраться в том что не работает и почему (где -- еще более-менее понятно).
Самый удобный способ отладиться (если, конечно, у вас есть доступ к исходникам (хотя и без таковых, часто)) это запустить отладчик в той IDE, с которой вам работается привычнее. У меня -- это Intellij IDEA (для нее есть плагин поддерживающий Scala) и делающий кодирование на Scala если и не идеально удобным, то покрайней мере удобнее многих известных мне IDE.
Стандарт для отладки в Java (а Scala с ней неразрывно связана) -- это JPDA.
Поскольку SBT -- это всего-навсего Java-программа, то и все что надо сделать -- это запустить VM с нужными параметрами:
# -------------- Debugging --------------------------------------- -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 # -----------------------------------------------------------------
Лучшее место куда можно положить строки выше находится в файле sbtconfig.txt
Все -- запускайте SBT (через sbt.bat или просто sbt в зависимости от вашей ОС):
sbt
Запустится коммандный режим SBT.
SBT выведет на экран первой строкой
Listening for transport dt_socket at address: 5005Это показывает, что Java машина слушает подключения (порт 5005).
Напишите к примеру: run (чтобы запустить приложение)
Перед этим, в своей IDE, поставьте break point на той строке, которая сможет вызваться в результате комманды выше.
Запустите отладчик в IDE (как правило в Intellij IDEA доп. настроек не требуется).
По достижению нужного участка кода отладчик остановится на нужной строке (показывая данные о переменных и т.п.)
Конец
Как видите, ничего выходящего за рамки обычной отладки под Java в этой заметке нет.Отладка работать будет, но если, к примеру, поставить точку отладки в функции, то окружающие переменные часто будут иметь не совсем те значения, на которые вы рассчитывали (сказывается природа того, что Scala базируется на Java (функции -- это анонимные внутренние классы во всеми вытекающими последствиями).