La depuración del código Scala con una simple acumulación-herramienta (SBT) y IntelliJ

StackOverflow https://stackoverflow.com/questions/4150776

Pregunta

¿Cuál es la forma más fácil de depurar código Scala gestionado por SBT usando IntelliJ del depurador integrado? La documentación de "RunningSbt" de sitio de Google Code de SBT comandos de listas para el funcionamiento de la clase principal para un proyecto o las pruebas, pero no parece haber ninguna orden para la depuración.

Seguimiento pregunta: ¿Cuál es la forma más fácil de adjuntar depurador de IntelliJ en Jetty al utilizar comandos a ejecutar embarcadero de SBT

¿Fue útil?

Solución

Para la depuración ordinaria en IntelliJ, se puede utilizar una configuración de ejecución de aplicaciones / depuración de la forma habitual, independientemente de si se está utilizando SBT para compilar el código.

Para conectarse a la aplicación que se ejecuta en el embarcadero, que necesita para crear una configuración de depuración remota. Al hacerlo, IntelliJ le dará un conjunto de argumentos de línea de comandos para ejecutar la JVM remota - algo así como

-Xdebug -Xrunjdwp: transport = dt_socket, servidor = y, suspender = n, dirección = 5005

Lanzamiento SBT con estos argumentos y luego ejecutar jetty-run. Por último, poner en marcha su configuración de depuración remota en IntelliJ. Este hilo podría ser útil.

Otros consejos

Hay una muy conveniente -jvm-debug en el indicador oficial SBT paquetes para Mac, Linux y de Windows . Usted puede utilizar el indicador para especificar el puerto de depuración:

sbt -jvm-debug 5005

Debajo de las sábanas , esto comienza la JVM para el SBT con el típica detallado encantamiento de depuración:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

Ahora puede ejecutar el código de la forma habitual, por ejemplo, con el comando SBT run.

Configuración de IntelliJ para conectar con el código que se ejecuta ...

Ahora se conecta IntelliJ a los procesos en marcha mediante un depuración remota de configuración . Tenga en cuenta que los 3 campos superiores en esta forma, mientras que miedo, son sólo para copiar texto a cabo de, en lugar de en (que están dando la depuración detallada encantamiento se ha especificado anteriormente, que ya se encarga -jvm-debug por usted) - la única configuración que puede cambiar es en la sección theSettings hasta la mitad:

 configuración de depuración remota en IntelliJ

he tenido algunos problemas con esto también, por lo que al riesgo de ser excesivamente detallado, esto es lo que hice:

CONFIGURACIÓN

  1. Crea una configuración de ejecución para SBT embarcadero-run

    • Ir a Ejecutar> Editar Configuraciones
    • Haga clic en el icono [+] y elija Scala Compilación del servidor
    • introducir el nombre que desee y haga clic en la opción "Ejecutar SBT Acción" casilla de verificación y seleccione la acción SBT embarcadero de gestión de la [...]
  2. Crea una configuración de depuración para la depuración remota

    • Ir a Ejecutar> Editar Configuraciones
    • Haga clic en el icono [+] y elija remoto
    • introducir el nombre que desee y copiar el -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 línea (asegúrese de hacer clic en OK para crear la configuración realidad)
  3. Configurar SBT plugin para ejecutar las opciones anteriores vm

    • Vaya a Archivo> Configuración> SBT
    • Pegue el -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 línea en los parámetros de VM caja, después de los que ya están allí

DEBUGGING

  1. Definición de puntos de corte según
  2. Inicie el servidor Web embarcadero por la elección de la configuración del muelle de una carrera SBT ha creado anteriormente y seleccionando Ejecutar> Ejecutar o haciendo clic en la flecha verde
  3. Iniciar el depurador remoto por la elección de la configuración de depuración remota que creó anteriormente y seleccionando Ejecutar> Depurar o haciendo clic en el icono de error

añado otra respuesta aquí, porque me encontré con esta pregunta cuando se esté buscando un problema relacionado:. Depuración de las clases de prueba con puntos de parada

Estoy utilizando ScalaTest, y normalmente se ejecutan utilizando un conjunto de comandos SBT de 'prueba de sólo'. Ahora cuando quiero utilizar el depurador interactivo, puedo hacer lo siguiente:

crear una nueva configuración de ejecución / depuración del tipo 'ScalaTest', coloque el principal "Clase de prueba:" nombre, y elija "Antes del lanzamiento: Ejecutar SBT Acción 'prueba de compilación'". Eso es todo, puede colocar puntos de interrupción ahora en las fuentes de prueba, y ejecutar esta configuración.

Ninguna de estas respuestas o enlaces proporcionados trabajado para mí, así que una vez que me di cuenta de esto, pensé que me gustaría compartir ...

incluyendo el fondo la comprensión de que no tenía cuando empecé ...

Esto se basa principalmente en las instrucciones aquí acaba con la explicación adicional que me llevó a través de él.

Mi Medio Ambiente: Scala 2.10.2, SBT 0,13, y IntelliJ 13.1

Antecedentes:

  • Por alguna razón, el uso de SBT para compilar Scala de IntelliJ no está integrado el camino proyectos Maven son (que permiten la depuración muy fácilmente).
  • Se desprende de mi entendimiento de que al compilar con SBT, se está compilando en un proceso separado, por lo tanto, tiene que ser la depuración remota.

¿Qué es la depuración?

  • La depuración es un modo que pueda ejecutar la JVM o aplicación en la que le permite controlar el flujo de ejecución de código.
  • La herramienta de depuración que utiliza puede entonces emitir comandos al motor de depuración que le dice "ejecutar la siguiente línea de código a continuación, hacer una pausa de nuevo" o "continuar con la ejecución" o "obtener el valor de la variable almacenada aquí en la memoria".

¿Qué es la depuración remota?

  • depuración remota está depurando través de una conexión de red (socket).
  • Esta conexión de red le permite emitir los comandos a la depuración del motor de una máquina remota.
  • Esto es útil para cuando se quiere depurar el código que se ejecuta en un servidor remoto, pero
  • También es útil para situaciones como código Scala se ejecutan bajo SBT y puesta en marcha a través de un servidor web, como el embarcadero o Tomcat, separado de su entorno de IntelliJ.

Hacer referencia el enlace anterior, las siguientes explicaciones / modificaciones son útiles:

  1. Configuración de IntelliJ para lanzar SBT con los "habilitar la depuración" valores de JVM, incluyendo el puerto a utilizar al instalar el conector de red. (Sin cambios) agregar los parámetros de VM con nombre para la configuración de IntelliJ.
  2. Asegúrese de que el número de puerto aquí coincida con la configuración de JVM desde el paso 1.
  3. Al iniciar SBT, es necesario hacerlo desde el plugin SBT consola (que es lo que configuró en el paso 1). Si usted está funcionando fuera de SBT de IntelliJ (en la línea de comandos), tendrá que poner en marcha SBT con los mismos parámetros de VM desde el Paso 1 (no hice esto; por lo que no hay instrucciones). Después de este paso, SBT ya está funcionando (pero el código no es todavía) y la JVM está configurada para la depuración remota.
  4. Se inicia la herramienta de depuración IntelliJ, que conecta con la JVM inició en el paso 3.
  5. Por último, se inicia la compilación en la consola de SBT. Esto se puede hacer con cualquier comando de compilación, incluyendo un comando continua compilación. Si recompilación continua, la recompilación va a pasar, pero no mientras está en pausa la ejecución de código por el depurador.

Esta funciona para mí cada vez, y lo único que se necesita para configurar la depuración remota está en IntelliJ; Pongo en marcha SBT con los parámetros de JVM de la terminal en IntelliJ:

sbt -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

Después de que pueda empezar la depuración remota en localhost: 5005

El uso de Scala 2,10 y 0,12 SBT, lo tengo trabajando de esta manera: http://tuliodomingos.blogspot.com.es/2014/01/scala-remote-debugging-in-sbts-jetty.html

he estado luchando con la depuración también en Windows con un spray-can / Akka / Scala aplicación integrada a través de SBT, utilizando IntelliJ. Al poner en común diversas sugerencias, el método más sencillo para mí fue:

  1. Asegúrese de que tiene sbt.Revolver en su proyecto / plugsin.sbt archivo por ejemplo.

    addSbtPlugin ( "io.spray" % "SBT-revólver" % "0.7.1")

  2. Definición de javaoptions en que build.sbt archivo:

    javaOptions: = Seq ( "- Xdebug", "-Xrunjdwp: transport = dt_socket, servidor = y, suspender = y, dirección = 5,005")

En particular, el uso de suspensión = y opción. Esto mantendrá la aplicación hasta que se conecte un depurador remoto desde IntelliJ

  1. establecer una configuración de depurador en IntelliJ a través del menú Run / Editar Configuraciones. Pulse el botón +, seleccione la opción "a distancia". Asegúrese de que las entradas se ajustan a las javaoptions anteriores, en particular, la dirección del puerto de 5005. Da la configuración un nombre como 'spray'.

  2. A partir de su uso consola SBT el comando volver a empezar. Debería ver la dirección 5005 en el puerto de salida de realimentación.

  3. En Intellij establece los puntos de interrupción.

  4. A partir de IntelliJ, seleccione el Run \ depuración 'spray'. Esto debe conectarse al servidor web por aspersión lata. Usted debe ser capaz de ver una gran cantidad de hilos en la ventana de depuración.

  5. Mira que algunas de las directivas Get en Spray parece que se ejecutan en el arranque, pero no repetidos en llamar a la página web.

Archivo-> Configuración> Otros Configuración-> SBT parámetros de VM Xmx512M -XX: MaxPermSize = 256M -Xdebug -Xrunjdwp: transport = dt_socket, servidor = y, suspender = n, dirección = 5005

Run-> Editar Configuraciones Pulse + y luego seleccionar a distancia Presione Aplicar

Ahora en la consola SBT (Partido interior de IntelliJ) cuando se ejecuta el 'run' comando verá "que escucha por dt_socket transporte en la dirección: 5005"

Ahora pulse Run-> Depuración. Verá los menús de depuración a continuación activado. Tiene dos lengüetas del depurador y la consola.

Uso F7 a partir de la siguiente línea a la siguiente

Elegí suspendo ser n. Con ser y cuando me encontré con la orden de marcha se quedó atorado

Por lo que vale de Windows popular, editar %SBT_HOME%\bin\sbt.bat y localizar las siguientes líneas de código:

:run

"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*
if ERRORLEVEL 1 goto error
goto end

A continuación, reemplazarlos con este código:

FOR %%a IN (%*) DO (
  if "%%a" == "-jvm-debug" (
    set JVM_DEBUG=true
    set /a JVM_DEBUG_PORT=5005 2>nul >nul
  ) else if "!JVM_DEBUG!" == "true" (
    set /a JVM_DEBUG_PORT=%%a 2>nul >nul
    if not "%%a" == "!JVM_DEBUG_PORT!" (
      set SBT_ARGS=!SBT_ARGS! %%a
    )
  ) else (
    set SBT_ARGS=!SBT_ARGS! %%a
  )
)

if defined JVM_DEBUG_PORT (
  set _JAVA_OPTS=!_JAVA_OPTS! -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=!JVM_DEBUG_PORT!
)

call :run %SBT_ARGS%

if ERRORLEVEL 1 goto error
goto end

:run
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*
goto :eof

Lo mejor que puedo hacer para conseguir mismo comportamiento para -jvm-debug cuando se ve en la secuencia de comandos Bash lanzador

NB. No creo %SBT_HOME% realidad existe fuera de este script, a menos que haya creado explícitamente en que el medio ambiente, pero de todos modos se consigue el punto: D

También tiene el mismo problema, me gusta compartir cómo resolví. Por cierto estoy usando Ubuntu 14.04 y IntelliJ 15.

  1. Configuración -> SBT -> Pegado debajo de la línea en el cuadro de texto VM Parámetros:

    -XX: MaxPermSize = 384M -Xdebug -Xrunjdwp: transport = dt_socket, servidor = y, suspender = n, dirección = 5005

  2. abierto Termilal en IntelliJ y ejecute:

    SBT -jvm-debug 5005

    Nota: debería ver esta línea en el terminal: "Para escuchar a la dt_socket transporte en la dirección: 5005"

  3. Editar Configuraciones -> Haga clic en + -> Seleccione 'remoto'

    I. Give some name example: DebugMyModule
    
    II. All needed configurations will be set automatically, But you just verify. In Command line arguments should look like this "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005".
    
    III. In 'Search Sources in Module's Classpath' text box specify your module in which module your test cases are there.
    
    IV. put 127.0.0.1 host instead of 'localhost'. 'localhost' not working for me.
    
  4. Seleccione DebugMyModule en Edit Configurations cuadro de lista y haga clic en Depurar .

    Nota: Debe ver depuración vista abierta y en la consola de depuración Usted debe poder ver "Conectado con el VM de destino, dirección: '127.0.0.1:5005', el transporte: 'toma'"

  5. puntos de interrupción Poner en pocos casos de prueba en su Testclass.

  6. Vamos a la terminal donde se ejecuta "sbt -jvm-debug 5005" y ejecutar, como a continuación

    project <your-module-name>
    it:testOnly package.TestSpec
    

    Por ejemplo: com.myproject.module.AddServiceTest [Spec]

  7. Se puede ver de depuración se inició en el caso de test punto de interrupción.

export SBT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5009

Probar

De acuerdo con la respuesta de Roberto Tyley anterior, pero en Windows también tenemos que establecer las siguientes variables de entorno después de la instalación de SBT:

SBT_HOME
C: \ Archivos de programa (x86) \ SBT \
[SBT o donde está instalado]

SBT_OPTS
-Xdebug -runjdwp: transport = dt_socket, servidor = y, suspender = n, dirección = 5005

[por ejemplo IntelliJ de RT]

Añadir a la ruta:% SBT_HOME% \ bin; SBT_OPTS%%

A continuación, ejecute el siguiente en la línea de comandos dentro de la carpeta del proyecto "SBT ejecutar -debug -jvm 5005".

Si esto funciona correctamente, la línea de comandos hará una salida de línea inicialmente re "Para escuchar a la dt_socket transporte en la dirección: 5005".

Establecer punto de interrupción en IntelliJ.

Abrir página web en el navegador para activar el depurador punto de interrupción, por ejemplo, " http: // localhost: 9000 / ".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top