Как отлаживать макросы Scala с помощью Eclipse

Я пытаюсь установить точку останова в реализации макроса Scala с помощью Eclipse IDE и не могу

Во-первых: Scala Macros Rock! До сих пор я предпочитал Clojure Scala, но с макросами я больше не уверен

Я пытаюсь создать макрос, который вернет toString функции и саму функцию. Когда это сработает, я собираюсь создать новую функцию с разумным toString. Ах, счастливые дни.

Но мне нужно уметь отлаживать макросы. Я использую Eclipse (20110615-0604) со Scala (2.10.1). Я загрузил scala-compiler-2.10.1.jar и код из http://www.warski.org/blog/2012/12/starting-with-scala-macros-a-short-tutorial/ теперь работает. Я также написал пару простых макросов. Макросы находятся в проекте eclipse «ScalaMacro», а код, который их использует, находится в отдельном проекте «HelloScalaMacro».

Теперь я бы хотел их отладить

Следуя инструкциям на странице http://docs.scala-lang.org/overviews/macros/overview.html Я создал конфигурацию среды выполнения с scala.tools.nsc.Main в качестве точки входа. Я добавил -cp HelloScala.scala, и когда я запускаю конфигурацию, кажется, что код компилируется (если я добавляю ошибки, он правильно сообщает об ошибках).

К сожалению, инструкции подразумевают, что точка останова в реализации макроса должна вызывать паузу Eclipse. Это не так.

Я сделал как обычно: поискал в Google макроса Eclipse / Scala / Debug / Breakpoint, прочитал все вопросы о stackoverflow в теге scala-macro и много поиграл с каждой настройкой eclipse, которую смог найти.

Итак, если кто-то из вас знает, как устанавливать точки останова, не могли бы вы сообщить мне, как: это проблема версии eclipse / версии scala / ...?


person Stave Escura    schedule 06.05.2013    source источник


Ответы (2)


Я сам этого не пробовал, и в принципе это так же вероятно (или более вероятно), что и то, что вы уже пробовали, но в случае успеха это может быть более удобным для вас.

Чтобы попробовать это, у вас должна быть Scala-IDE вместе с установленным исходным кодом. Убедитесь, что вы работаете с установкой Eclipse, которая является либо «Eclipse Classic», «Eclipse for RCP Developers», либо аналогичной смесью, которую вы придумали самостоятельно.

Вы также захотите установить плагин Equinox Weaving Launcher, который позволит вам создать пусковые установки «Eclipse Application with Equinox Weaving».

Теперь:

  1. Создать новое рабочее пространство
  2. Создать проект Scala
  3. Вставьте свой код макроса в этот проект
  4. Добавить точку останова в источнике макроса

Готовимся к отладке:

  1. Создайте новую конфигурацию запуска отладки «Приложение Eclipse с Equinox Weaving». Дайте имя более элегантное, чем «Новая_конфигурация».

    • under "location", point it towards a new different workspace directory
    • на вкладке "Конфигурация" укажите что-то вроде "-Xmx1536m"
    • По умолчанию все плагины, доступные для вашего запущенного экземпляра Eclipse, должны быть доступны для экземпляра, который вы собираетесь запустить. Eclipse может потребоваться некоторое уговаривание, чтобы включить проект, не являющийся подключаемым модулем, в путь к классам - если это не сработает, это первое, на что я попытаюсь взглянуть.
  2. Теперь вам нужно запустить конфигурацию отладки.

    • Depending on your Scala-IDE version, you may encounter a "Multiple launchers available -- Select one..." warning. I'd go for "Equinox Weaving enabled Eclipse Application Launcher".

Оказавшись внутри отлаживаемого экземпляра Eclipse:

  1. Создайте проект, в котором хотите использовать макрос
  2. Не забудьте добавить зависимость от двоичного вывода
  3. Добавьте небольшой пример использования вашего макроса в проект в отлаживаемой рабочей области.
  4. Скрестите пальцы
  5. Строить

Теоретически запускающий экземпляр Eclipse теперь приостанавливает отлаживаемый экземпляр в точке останова.

person nadavwr    schedule 06.05.2013
comment
Несколько часов экспериментов с каждым вариантом затмения в книге, и он у меня работает. Я отправлю правильный ответ, когда StackOverflow позволит мне - person Stave Escura; 06.05.2013

Инструкции, данные Nadavwr (чуть ниже), были полезны, и я рекомендую их другим людям.

Ключевым решением для меня было осознать, что задействованы два проекта: проект, который определяет макрос, и проект, который использует макрос. Скорее всего, я пытался отладить проект, который определил макрос

Таким образом, инструкции, приведенные в документации, верны, мне просто нужно было убедиться, что я запускаю их в правильном проекте: очевидно, конечно.

Для пользы других людей я счел очень полезным использовать скаляр командной строки, чтобы получить правильную командную строку: гораздо быстрее редактировать это и контролировать, в каком каталоге я был, а затем в eclipse

Еще одна вещь, которую следует понять людям, которые думают об использовании макросов Scala, заключается в том, что сообщения об ошибках от прямого запуска scalac НАМНОГО лучше, чем сообщения от eclipse.

person Stave Escura    schedule 06.05.2013