web-dev-qa-db-fra.com

Attachez le débogueur IntelliJ IDEA à un processus en cours d'exécution Java

Est-il possible d'attacher le débogueur IntelliJ IDEA à un processus en cours d'exécution Java? Si oui comment?

214
Marco

Oui! Voici comment vous le configurez.

Exécuter la configuration

Créez une configuration d'exécution à distance:

  1. Exécuter -> Modifier les configurations ...
  2. Cliquez sur le "+" en haut à gauche
  3. Sélectionnez l'option "Distant" dans le volet le plus à gauche
  4. Choisissez un nom (j'ai nommé le mien "débogage à distance")
  5. Cliquez sur "OK" pour enregistrer:

enter image description here

Options JVM

La configuration ci-dessus fournit trois champs en lecture seule. Ce sont des options qui indiquent à la JVM d'ouvrir le port 5005 pour le débogage distant lors de l'exécution de votre application. Ajoutez celui qui convient aux options de la machine virtuelle Java de l’application que vous déboguez. Une façon de faire serait la suivante:

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

Mais cela dépend de la manière dont vous exécutez votre application. Si vous ne savez pas lequel des trois vous concerne, commencez par le premier et descendez dans la liste jusqu'à trouver celui qui vous convient.

Vous pouvez modifier suspend=n en suspend=y pour forcer votre application à attendre jusqu'à ce que vous vous connectiez à IntelliJ avant de démarrer. Ceci est utile si le point d'arrêt que vous souhaitez atteindre survient au démarrage de l'application.

Déboguer

Démarrez votre application comme vous le feriez normalement, puis dans IntelliJ, sélectionnez la nouvelle configuration et cliquez sur "Déboguer".

enter image description here

IntelliJ se connectera à la machine virtuelle Java et lancera le débogage à distance.

Vous pouvez maintenant déboguer l'application en ajoutant des points d'arrêt à votre code à l'endroit souhaité. La sortie de l'application apparaîtra toujours là où elle était auparavant, mais vos points d'arrêt atteindront dans IntelliJ.

349
Cory Klein

C'est possible, mais vous devez ajouter des indicateurs JVM lorsque vous démarrez votre application.

Vous devez ajouter une configuration de débogage distant: Modifiez la configuration -> Distant.

Ensuite, vous trouverez dans la fenêtre de dialogue affichée les paramètres que vous devez ajouter à l'exécution du programme, comme:

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

Ensuite, lorsque votre application est lancée, vous pouvez attacher votre débogueur. Si vous voulez que votre application attende que le débogueur soit connecté, il suffit de changer l'indicateur de suspension en y (suspend=y)

42
Jakub Kubrynski

dans AndroidStudio ou idée

  1. Config l'application sera debug, ouvrez Edit Configurations

ajouter "Options VM" Config “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” Mémoriser "adresse"

enter image description here

  1. Config Remote Debugger s’il n’existe pas, cliquez sur + pour ajouter

spécifiez "Port" comme à l'étape 1 "adresse" enter image description here

5
Bill

En outre, n'oubliez pas que vous devez ajouter l'indicateur "-Xdebug" dans l'application Java_OPTS si vous souhaitez vous connecter en mode débogage.

5
Max

Aussi, j'utilise l'application Tomcat GUI (dans mon cas: C:\Tomcat\bin\Tomcat9w.bin).

  • Accédez à l'onglet Java :

    enter image description here

  • Définissez vos propriétés Java, par exemple:

    machine virtuelle Java

    C:\Program Files\Java\jre-10.0.2\bin\server\jvm.dll

    machine virtuelle Java

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

    Options 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 = transport = dt_socket, serveur = y, suspendre = n, adresse = *: 8000

    options 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 = ALL-UNNAMED

0
Taras Melnyk