Я пробую Scala веб-фреймворк Scalatra. В соответствии с здесь здесь приведены шаги по включению отладки IntelliJ:

  1. Добавьте обычные параметры JDK для удаленной отладки: "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
  2. Создайте «Удаленный» запуск конфигурации в Intellij
  3. Запустите sbt, запустите jetty:start, а затем запустите удаленный отладчик

Когда я делаю это, SBT распечатывает:

Listening for transport dt_socket at address: 5005

И IntelliJ печатает:

Connected to the target VM, address: 'localhost:5005', transport: 'socket'

Однако точки останова, похоже, не работают. Когда я нажимаю на следующую конечную точку с точкой останова на *:

class AppServlet extends AppStack {
  get("/break-test") {
*   val response = "DONE"
    response
  }
}

Код не останавливается на этой строке, но продолжается, поэтому я получаю ответ DONE.

Я использую Java 1.8.0_111, Scala 2.12 и SBT 0.13.15.

9
Joaquim d'Souza 29 Май 2017 в 01:47

2 ответа

Лучший ответ

Вот что я использую для удаленной отладки:

-agentlib : JDWP = транспорт = транспорт по сокетам , сервер = у , приостановить = п , s = Адресная 5005 .

Значение, которое вы используете выше в своем ответе, -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005, используется в поле For JDK 1.4.x.

4
brunovianarezende 31 Май 2017 в 10:55

Когда вы запускаете SBT с -jvm-debug, вы присоединяете отладчик к этому процессу SBT, jetty: start разветвляется и запускает jetty в новом процессе. Чтобы иметь возможность отлаживать ваше приложение, вы должны установить переменную debugPort в build.sbt (.settings(debugPort in Jetty := 5005)) или в SBT repl (set debugPort in Jetty := 5005), а затем запустить причину с помощью jetty:debug (I Я предполагаю, что вы используете xsbt-web-plugin).

0
brunovianarezende 29 Май 2017 в 23:30