¿Cuál es la forma más fácil de depurar el código Scala administrado por sbt utilizando el depurador integrado de IntelliJ? La documentación de "RunningSbt" del sitio de código de Google de sbt enumera los comandos para ejecutar la clase principal para un proyecto o las pruebas, pero parece que no hay comandos para depurar.
Pregunta de seguimiento: ¿cuál es la forma más fácil de conectar el depurador de IntelliJ a Jetty cuando se usa el comando jetty-run de sbt?
scala
intellij-idea
jetty
sbt
Mateo
fuente
fuente
Respuestas:
Para la depuración normal en IntelliJ, puede utilizar una configuración de ejecución / depuración de la aplicación de la forma habitual, independientemente de si está utilizando sbt para compilar su código.
Para conectarse a su aplicación que se ejecuta en Jetty, deberá crear una configuración de depuración remota. Cuando lo haga, IntelliJ le dará un conjunto de argumentos de línea de comando para ejecutar la JVM remota, algo así como
Inicie sbt con estos argumentos y luego ejecútelo
jetty-run
. Finalmente, inicie su configuración de depuración remota en IntelliJ. Este hilo puede resultar útil.fuente
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
jetty-run
en el indicador de sbt.sbt -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
?sbt -jvm-debug 5005
.Hay una
-jvm-debug
bandera muy conveniente en los paquetes SBT oficiales para Mac, Linux y Windows . Puede usar la bandera para especificar el puerto de depuración:Bajo las sábanas , esto inicia la JVM para SBT con el típico encantamiento de depuración detallado:
Ahora puede ejecutar su código normalmente, por ejemplo, con el
run
comando sbt .Configuración de IntelliJ para conectarse al código en ejecución ...
Ahora conecte IntelliJ a su proceso en ejecución mediante una configuración de depuración remota . Tenga en cuenta que los 3 campos superiores en esta forma, mientras que miedo, son sólo para copiar el texto fuera de, en lugar de en (que están dando la depuración detallada encantamiento se ha especificado anteriormente, que
-jvm-debug
ya se toma el cuidado de usted) - la única configuración que puedes cambiar está en laSettings
sección a la mitad:fuente
-jvm-debug
parámetro y lo envíes como una solicitud de extracción; tienes muchas posibilidades de beneficiar a todos los que se encuentran en la misma plataforma.También tuve algunos problemas con esto, así que a riesgo de ser demasiado detallado, esto es lo que hice:
PREPARAR
Cree una configuración de ejecución para sbt jetty-run
Crear una configuración de depuración para depuración remota
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
(asegúrese de hacer clic en Aceptar para crear la configuración)Configure el complemento sbt para ejecutar las opciones vm anteriores
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
en el cuadro de parámetros de VM, después de los que ya están allíDEPURACIÓN
fuente
sbt -jvm-debug 5005 console
, luego establecer el punto de interrupción en intelllJ Idea, ejecutar la depuración.sbt -jvm-debug 5005 console
no funcionó para mí, pero losbt -jvm-debug 5005
hizo.Este me funciona todo el tiempo, y lo único que necesita configurar es la depuración remota en IntelliJ; Enciendo SBT con parámetros JVM desde el terminal en IntelliJ:
Después de eso, puedo iniciar la depuración remota en localhost: 5005
fuente
Estoy agregando otra respuesta aquí, porque encontré esta pregunta al buscar un problema relacionado: Depurar clases de prueba usando puntos de interrupción.
Estoy usando ScalaTest, y normalmente ejecuto una suite usando el comando 'solo prueba' de sbt. Ahora, cuando quiero usar el depurador interactivo, puedo hacer lo siguiente:
Cree una nueva configuración de ejecución / depuración de tipo 'ScalaTest', coloque el nombre principal de "Clase de prueba:" y elija "Antes del lanzamiento: Ejecutar acción SBT 'prueba-compilación'". Eso es todo, puede colocar puntos de interrupción ahora en las fuentes de prueba y ejecutar esta configuración.
fuente
Ninguna de estas respuestas o enlaces proporcionados funcionó para mí, así que una vez que descubrí esto, pensé que compartiría ...
incluida la comprensión previa que no tenía cuando comencé ...
Esto se basa principalmente en las instrucciones aquí. solo con una explicación adicional que me ayudó a hacerlo.
Mi entorno: Scala 2.10.2, SBT 0.13 e IntelliJ 13.1
Antecedentes:
¿Qué es la depuración?
¿Qué es la depuración remota?
Haciendo referencia al enlace anterior, las siguientes explicaciones / modificaciones son útiles:
fuente
También he estado luchando con la depuración en Windows con una aplicación Spray-can / Akka / Scala construida a través de SBT, usando Intellij. Juntando varias sugerencias, el enfoque más simple para mí fue:
Asegúrese de tener sbt.Revolver en su archivo project / plugsin.sbt, por ejemplo
addSbtPlugin ("io.spray"% "sbt-revolver"% "0.7.1")
Establezca javaoptions en su archivo build.sbt:
javaOptions: = Seq ("- Xdebug", "-Xrunjdwp: transporte = dt_socket, servidor = y, suspender = y, dirección = 5005")
En particular, use la opción suspender = y. Esto mantendrá la aplicación hasta que conecte un depurador remoto de Intellij
Configure una configuración de depurador en Intellij a través del menú Ejecutar / Editar configuraciones. Presione el botón +, seleccione la opción "Remoto". Asegúrese de que las entradas coincidan con las opciones de Java anteriores, en particular la dirección del puerto 5005. Dé a la configuración un nombre como 'Spray'.
Desde su consola SBT use el comando re-start. Debería ver la dirección del puerto 5005 en la salida de retroalimentación.
En Intellij establezca sus puntos de interrupción.
Desde Intellij, seleccione Run \ Debug 'Spray'. Esto debería conectarse al servidor web de la lata de aerosol. Debería poder ver muchos hilos en la ventana de depuración.
Tenga en cuenta que algunas de las directivas Get en Spray parecen ejecutarse al inicio, pero no repetidamente al llamar al sitio web.
fuente
Usando Scala 2.10 y SBT 0.12, lo hice funcionar así: http://tuliodomingos.blogspot.com.es/2014/01/scala-remote-debugging-in-sbts-jetty.html
fuente
Por lo que vale la gente de Windows, edite
%SBT_HOME%\bin\sbt.bat
y localice las siguientes líneas de código:luego reemplácelos con este código:
Lo mejor que puedo hacer para obtener el mismo comportamiento
-jvm-debug
cuando se ve en el lanzador de scripts BashNÓTESE BIEN. No creo
%SBT_HOME%
que exista realmente fuera de este script, a menos que lo haya creado explícitamente en su entorno, pero de todos modos entiende el punto: Dfuente
Archivo-> Configuración-> Otras configuraciones-> Parámetros SBT VM -Xmx512M -XX: MaxPermSize = 256M -Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = n, address = 5005
Ejecutar-> Editar configuraciones Presione + y luego seleccione remoto Presione Aplicar
Ahora en la consola SBT (iniciada en el interior por intelliJ) cuando ejecute el comando 'ejecutar' verá "Escuchando el transporte dt_socket en la dirección: 5005"
Ahora presione Ejecutar-> Depurar. Verá activados los menús de depuración a continuación. Tiene dos pestañas Depurador y Consola.
Utilice F7 para pasar de la siguiente línea a la siguiente
Elegí suspender para ser n. Siendo y cuando ejecuté el comando de ejecución, estaba atascado
fuente
prueba esto
fuente
También tengo el mismo problema, me gusta compartir cómo lo resolví. Por cierto, estoy usando Ubuntu 14.04 e IntelliJ 15.
En Configuración -> SBT -> Pegado debajo de la línea en el cuadro de texto Parámetros de VM:
-XX: MaxPermSize = 384M -Xdebug -Xrunjdwp: transporte = dt_socket, servidor = y, suspender = n, dirección = 5005
Termilal abierto en IntelliJ y ejecutar:
sbt -jvm-debug 5005
Nota: debería ver esta línea en la terminal: "Escuchando transporte dt_socket en la dirección: 5005"
Editar configuraciones -> Haga clic en + -> Seleccione 'Remoto'
Seleccione DebugMyModule en el
Edit Configurations
cuadro de lista y haga clic en Depurar .Nota: Debería ver la vista de depuración abierta y en la consola de depuración debería poder ver "Conectado a la máquina virtual de destino, dirección:,
'127.0.0.1:5005'
transporte: 'socket'"Ponga puntos de interrupción en algunos casos de prueba en su clase de prueba.
Ven a la Terminal donde ejecutas "
sbt -jvm-debug 5005
" y corre como se muestra a continuaciónPor ejemplo: com.myproject.module.AddServiceTest [Spec]
Puede ver la depuración iniciada en el punto de interrupción de su caso de prueba.
fuente
El complemento AttachMe IntelliJ es una forma potencialmente más rápida de adjuntar el depurador sin tener que jugar con los números de puerto:
La publicación del blog y el archivo Léame tienen instrucciones de configuración, sin embargo, tuve que modificarlas un poco para que funcionara en mi máquina.
Descargar el
installer.sh
script del repositorio oficialchmod u+x installer.sh
./installer.sh
/.config/attachme/agent.jar
y crear un~/.attachme
archivoModificar
~/.attachme
para contenerInstale el complemento Attachme correspondiente y reinicie:
IntelliJ | Preferences | Plugins
Attachme
configuración de ejecución:Run | Edit configurations... | Add new configuration | Attachme debugger registry | OK
Después de estas travesuras únicas, podemos adjuntar un depurador automáticamente al
Attachme
configuración de ejecuciónsource ~/.attachme
sbt "runMain example.Hello"
fuente
Según la respuesta de Roberto Tyley anterior, pero en Windows también debemos configurar las siguientes variables de entorno después de instalar sbt:
SBT_HOME
C: \ Archivos de programa (x86) \ sbt \
[o donde esté instalado sbt]
SBT_OPTS
-Xdebug -runjdwp: transporte = dt_socket, servidor = y, suspender = n, dirección = 5005
[según el ejemplo de IntelliJ de RT]
Agregar a la ruta:% SBT_HOME% \ bin;% SBT_OPTS%
Luego ejecute lo siguiente en la línea de comando dentro de la carpeta del proyecto "sbt run -jvm -debug 5005".
Si esto funciona correctamente, la línea de comandos inicialmente generará una línea re "Escuchando transporte dt_socket en la dirección: 5005".
Establecer punto de interrupción en IntelliJ.
Abra el sitio web en el navegador para activar el punto de interrupción del depurador, por ejemplo, " http: // localhost: 9000 / ".
fuente