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

238

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

Marco
la source
3
Bien sûr. Vous devez créer une configuration Run / Debug "Remote". Plus ici
Vic
2
Um, ces arguments de ligne de commande sont en lecture seule à partir de 14.0.2. Vous ne pouvez en modifier que quelques-uns, ce qui n'aide pas à résoudre le problème dans cette question. Une idée de comment résoudre ce problème?
nuzzolilo
La réponse est ici: stackoverflow.com/questions/51207430/…
RoutesMaps.com

Réponses:

374

Oui! Voici comment vous l'avez configuré.

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 "À distance" dans le volet le plus à gauche
  4. Choisissez un nom (j'ai nommé le mien "débogage à distance")
  5. Cliquez sur "OK" pour enregistrer:

entrez la description de l'image ici

Options JVM

La configuration ci-dessus fournit trois champs en lecture seule. Ce sont des options qui indiquent à la machine virtuelle Java d'ouvrir le port 5005 pour le débogage à distance lors de l'exécution de votre application. Ajoutez celle appropriée aux options JVM de l'application que vous déboguez. Une façon de procéder serait comme ceci:

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

Mais cela dépend de la façon dont vous exécutez votre application. Si vous ne savez pas lequel des trois s'applique à vous, commencez par le premier et descendez la liste jusqu'à ce que vous trouviez celui qui fonctionne.

Vous pouvez changer suspend=n pour suspend=yforcer votre application à attendre jusqu'à ce que vous vous connectiez à IntelliJ avant de démarrer. Cela est utile si le point d'arrêt que vous souhaitez atteindre se produit 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».

entrez la description de l'image ici

IntelliJ se connectera à la JVM et lancera le débogage à distance.

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

Cory Klein
la source
2
L'option "Remote" est absente dans mon Intellij IDEA 15.0.2 sur mac os el capitan. Comment puis-je obtenir cette option?
user674669
@ user674669 Je ne suis pas sûr. Peut Remote- être n'est pas disponible sur l'édition communautaire? J'utilise la version payante. Quelqu'un avec l'édition communautaire peut-il confirmer?
Cory Klein
@CoryKlein Savez-vous comment récupérer la sortie d' System.out.printlnIntelliJ lors du débogage à distance?
Don Rhummy
1
@DonRhummy Si vous comprenez comment, je serais heureux d'ajouter ces informations à cette réponse, mais AFAIK IntelliJ ne prend actuellement pas en charge la redirection de stdout et stderr depuis une application distante vers IntelliJ.
Cory Klein
Si le serveur distant n'est accessible que via ssh, comment spécifier le fichier de clé?
vach
44

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

Vous devez ajouter une configuration de débogage à distance: Modifier la configuration -> À distance.

Ensuite, vous trouverez dans la fenêtre de dialogue affichée des 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é, changez simplement l'indicateur de suspension en y ( suspend=y)

Jakub Kubrynski
la source
Cela m'a dérouté que vous modifiez les entrées ci-dessous et celles-ci mettent ensuite à jour les chaînes d'options ci-dessus (en 13.1 CE, au moins.)
Carl G
7
Um, ces arguments de ligne de commande sont en lecture seule à partir de 14.0.2. Vous pouvez en modifier deux. Une idée de comment résoudre ce problème?
nuzzolilo
1
De plus, à quel processus vous attachez-vous en définissant ces options?
nuzzolilo
5
Le premier a fonctionné pour moi. Remarque pour les autres - je devais spécifier cela avant le drapeau -jar.
Jim
2
@Nuzzolilo, les arguments de ligne de commande affichés dans idea sont uniquement à des fins d'affichage et sont donc en lecture seule. Ils ne sont pas censés être ajoutés à l'idée mais à l'application Java distante que vous souhaitez déboguer.
Ganesh Krishnan,
6

dans AndroidStudio ou idée

  1. Configurez l'application sera déboguer, ouvrez Modifier les configurations

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

entrez la description de l'image ici

  1. Config Remote Debugger s'il ne se ferme pas, cliquez sur + pour ajouter

spécifier "Port" comme à l'étape 1 "adresse" entrez la description de l'image ici

Facture
la source
6

N'oubliez pas non plus que vous devez ajouter l'indicateur "-Xdebug" dans l'application JAVA_OPTS si vous souhaitez vous connecter en mode débogage.

Max
la source
0

J'utilise également l'application Tomcat GUI (dans mon cas: C: \ tomcat \ bin \ Tomcat9w.bin).

  • Accédez à l' onglet Java :

    entrez la description de l'image ici

  • 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, server = y, suspend = n, address = *: 8000

    Options Java 9 :

    --add-opens = java.base / java.lang = TOUT NON NOMMÉ

    --add-opens = java.base / java.io = TOUT NON NOMMÉ

    --add-opens = java.rmi / sun.rmi.transport = TOUT NON NOMMÉ

Taras Melnyk
la source