пятница, 24 мая 2013 г.

Отладка в Scala (Debugging in Scala)

Привет, коллеги!

Статья перед выходными :)

Всем известный факт: при работе над проектом любой сложности возникает потребность в отладке кода. Сложный, простой -- нет разницы, всегда есть вариант что-то написать не так.

Поскольку в наше время большая редкость проект состоящий из нескольких файлов, то и непосредственно компилятором 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 (функции -- это анонимные внутренние классы во всеми вытекающими последствиями).

Комментариев нет:

Отправить комментарий