Adjunte el depurador IntelliJ IDEA a un proceso Java en ejecución

238

¿Es posible adjuntar el depurador IntelliJ IDEA a un proceso Java en ejecución? Si es así, ¿cómo?

Marco
fuente
3
Por supuesto. Debe crear una configuración de ejecución / depuración "remota". Más aquí
Vic
2
Um, estos argumentos de la línea de comando son LECTOS SOLAMENTE a partir de 14.0.2. Puede editar solo un par de ellos, lo que no ayuda a resolver el problema en esta pregunta. ¿Algúna idea de cómo arreglar esto?
nuzzolilo
La respuesta está aquí: stackoverflow.com/questions/51207430/…
RoutesMaps.com

Respuestas:

374

¡Si! Así es como lo configuras.

Ejecutar configuración

Cree una configuración de ejecución remota:

  1. Ejecutar -> Editar configuraciones ...
  2. Haga clic en el "+" en la esquina superior izquierda
  3. Seleccione la opción "Remoto" en el panel de la izquierda
  4. Elija un nombre (llamé al mío "depuración remota")
  5. Haga clic en "Aceptar" para guardar:

ingrese la descripción de la imagen aquí

Opciones de JVM

La configuración anterior proporciona tres campos de solo lectura. Estas son opciones que le indican a la JVM que abra el puerto 5005 para la depuración remota al ejecutar su aplicación. Agregue el apropiado a las opciones de JVM de la aplicación que está depurando. Una forma en que podría hacer esto sería así:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

Pero depende de cómo ejecute su aplicación. Si no está seguro de cuál de los tres se aplica a usted, comience con el primero y baje la lista hasta encontrar el que funcione.

Puede cambiar suspend=na suspend=ypara obligar a su aplicación a esperar hasta que se conecte con IntelliJ antes de que se inicie. Esto es útil si el punto de interrupción que desea alcanzar se produce al iniciar la aplicación.

Depurar

Inicie su aplicación como lo haría normalmente, luego en IntelliJ seleccione la nueva configuración y presione 'Debug'.

ingrese la descripción de la imagen aquí

IntelliJ se conectará a la JVM e iniciará la depuración remota.

Ahora puede depurar la aplicación agregando puntos de interrupción a su código donde lo desee. El resultado de la aplicación seguirá apareciendo donde lo hizo antes, pero sus puntos de interrupción llegarán a IntelliJ.

Cory Klein
fuente
2
La opción "Remoto" está ausente en mi Intellij IDEA 15.0.2 en mac os el capitan. ¿Cómo puedo obtener esa opción?
user674669
@ user674669 No estoy seguro. ¿Quizás Remoteno está disponible en la edición comunitaria? Estoy usando la versión paga. ¿Alguien con la edición comunitaria puede confirmar?
Cory Klein
@CoryKlein ¿Sabes cómo tomar la salida de System.out.printlnIntelliJ cuando se realiza la depuración remota?
Don Rhummy
1
@DonRhummy Si descubre cómo, me complacería agregar esa información a esta respuesta, pero AFAIK IntelliJ actualmente no tiene soporte para canalizar stdout y stderr desde una aplicación remota de regreso a IntelliJ.
Cory Klein
Si solo se puede acceder al servidor remoto a través de ssh, ¿cómo especificamos el archivo de clave?
vach
44

Es posible, pero debe agregar algunas banderas JVM cuando inicie su aplicación.

Debe agregar la configuración de depuración remota: Editar configuración -> Remota.

Luego encontrará en los parámetros de la ventana de diálogo que debe agregar a la ejecución del programa, como:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

Luego, cuando se inicia su aplicación, puede adjuntar su depurador. Si desea que su aplicación espere hasta que el depurador esté conectado, simplemente cambie el indicador de suspensión a y ( suspend=y)

Jakub Kubrynski
fuente
Me confundió que edite las entradas a continuación y luego actualice las cadenas de opciones anteriores (en 13.1 CE, al menos)
Carl G
77
Um, estos argumentos de la línea de comando son LECTOS SOLAMENTE a partir de 14.0.2. Puedes editar un par de ellos. ¿Algúna idea de cómo arreglar esto?
nuzzolilo
1
Además, ¿a qué proceso se está conectando al configurar esas opciones?
nuzzolilo
55
El primero funcionó para mí. Nota para los demás: necesitaba especificar esto antes del indicador -jar.
Jim
2
@Nuzzolilo, los argumentos de la línea de comandos que se muestran en la idea son solo para fines de visualización y, por lo tanto, son de solo lectura. Se supone que no deben agregarse a la idea, sino a la aplicación remota de Java que desea depurar.
Ganesh Krishnan
6

en AndroidStudio o idea

  1. Configurar la aplicación será depurar, abrir Editar configuraciones

agregar "Opciones de VM" Config “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” recordar "dirección"

ingrese la descripción de la imagen aquí

  1. Configure el depurador remoto si no sale, haga clic en + para agregar

especifique "Puerto" igual que en el Paso 1 "dirección" ingrese la descripción de la imagen aquí

Cuenta
fuente
6

Además, no olvide que necesita agregar el indicador "-Xdebug" en la aplicación JAVA_OPTS si desea conectarse en modo de depuración.

Max
fuente
0

También utilizo la aplicación Tomcat GUI (en mi caso: C: \ tomcat \ bin \ Tomcat9w.bin).

  • Vaya a la pestaña Java :

    ingrese la descripción de la imagen aquí

  • Establezca sus propiedades Java, por ejemplo:

    Máquina virtual de Java

    C: \ Archivos de programa \ Java \ jre-10.0.2 \ bin \ server \ jvm.dll

    Máquina virtual de Java

    C: \ tomcat \ bin \ bootstrap.jar; C: \ tomcat \ bin \ tomcat-juli.jar

    Opciones de Java :

    -Dcatalina.home = C: \ tomcat

    -Dcatalina.base = C: \ tomcat

    -Djava.io.tmpdir = C: \ tomcat \ temp

    -Djava.util.logging.config.file = C: \ tomcat \ conf \ logging.properties

    -agentlib: jdwp = transporte = dt_socket, servidor = y, suspender = n, dirección = *: 8000

    Opciones de Java 9 :

    --add-opens = java.base / java.lang = ALL-UNNAMED

    --add-opens = java.base / java.io = ALL-UNNAMED

    --add-opens = java.rmi / sun.rmi.transport = TODOS SIN NOMBRE

Taras Melnyk
fuente