web-dev-qa-db-fra.com

Comment déboguer une application Play en utilisant activator?

Je sais que pour le cadre de jeu classique, il s'agit de play debug ~run. J'ai essayé d'exécuter activator debug ~run mais j'obtiens l'erreur suivante:

[error] Not a valid command: debug (similar: idea)
[error] Not a valid project ID: debug
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: debug (similar: debianSign, node)
[error] debug
[error]      ^

Qu'est-ce que je fais mal?

30
abourg28

Si vous ne faites que activator ~run, vous devriez pouvoir passer une option de port de débogage de la machine virtuelle Java avec:

./activator -jvm-debug <port> ~run

Cela peut ne pas faire la même chose que play-run, mais voici les arguments qu'il ajoute à la ligne de commande:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=<port>

De: https://github.com/typesafehub/activator/blob/master/dist/src/templates/activator#L107

J'ai réussi à joindre ce processus dans mon IDE. 

Si vous utilisez Windows, la configuration automatique est un peu différente. Avec le dernier activateur, vous pouvez effectuer les opérations suivantes:

  1. Ouvrez %UserProfile%\.activator\activatorconfig.txt (le profil d’utilisateur est différent selon votre installation Windows. Le mien est C:\Documents and Settings\jsuereth sur une installation et C:\Users\jsuereth sur une autre). Passé le texte suivant dans le fichier: -Xdebug-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=<PUT YOUR PORT HERE>
  2. Vous pouvez définir la propriété Java_OPTS sur la ligne de commande avant de démarrer l’activateur, par exemple .set "Java_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=<port>"

J'espère que cela pourra aider!

58
jsuereth

Avec le framework Play 2.x:

Dans le répertoire de votre projet, exécutez la commande activator comme

activateur -jvm-debug 9999 exécuter

Ceci fait, déboguez votre projet en tant qu'application Java distante dans votre IDE pour le lier au processus activateur.

Une fois que cela est fait, vous pourrez insérer votre code n'importe où. :)

4
user1242321

Une autre chose que j'ai découverte:

fork in run := false

fork in Test := false

dans "build.sbt".

Cela vous permet de déboguer vos tests, pas seulement l'application elle-même.

4
user3791111

J'ai Windows 7 et l'activateur 1.2.12, et les réponses ci-dessus ne m'ont pas fonctionné. Au lieu de cela, j'ai utilisé l'option "-jvm-debug" de la commande "activator.bat" du dossier de base du projet et cela a fonctionné. Comme ça:

C:\Projects\MyProject> activateur -jvm-debug 
 Écoute du transport dt_socket à l'adresse: 9999 
 [Info] Chargement de plugins globaux à partir de C:\Users\MyAccount\.sbt\0.13\plugins .__ [ info] Chargement de la définition de projet à partir de C:\Projects\MyProject\project 
 [info] Définir le projet actuel sur MyProject (dans le fichier de construction:/C:/Projects/MyProject /)

Ensuite, à l'intérieur de l'activateur (sbt), j'ai utilisé la commande "run". Comme ça:

[MyProject] $ run 

--- (l'exécution de l'application, le rechargement automatique est activé) ---

 [Info] play - Écoute de HTTP sur/0: 0: 0: 0: 0: 0: 0: 0: 9000 
 'Force' activé 

 (Le serveur a démarré, utilisez Ctrl + D pour vous arrêter et revenir à la console ...) 

 Lancer la "surveillance"

Pour déboguer depuis Eclipse, cliquez avec le bouton droit sur le projet et sélectionnez "Déboguer en tant que, Configurations de débogage". Dans la boîte de dialogue Configurations de débogage, cliquez avec le bouton droit de la souris sur "Application Java à distance" et sélectionnez "Nouveau". Changez le port en 9999 et cliquez sur "Appliquer". A partir de maintenant, vous pouvez cliquer sur "Debug" pour vous connecter à l'application en cours d'exécution.

4
Readren

J'ai essayé la solution de Readren mais en utilisant l'édition de communauté IntelliJ IDEA (donc pas de support Play intégré) à la place d'Eclipse.

C’est fondamentalement la façon dont il est documenté de fonctionner avec le nouveau logiciel Typesafe Activator (j’utilise 1.3.2). Pour moi, l'application s'est exécutée et le débogueur IntelliJ semblait être en train de se connecter, mais il ne touchait aucun point d'arrêt (les points d'arrêt dans IntelliJ ne comportaient pas de coche indiquant qu'ils ne seraient pas touchés).

J'ai essayé de changer la configuration de DEBUG_OPTS dans le fichier activator.bat pour utiliser la forme -agentlib des arguments de la ligne de commande jdwp et cela a semblé résoudre le problème pour moi.

rem set DEBUG_OPTS=-Xdebug -Xrunjdwp:tnsport=dt_socket,server=y,suspend=n,address=!JPDA_PORT!
set DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999

Je devrais probablement mettre cela dans un fichier activatorconfig.txt quelque part, mais avoir passé environ 4 heures à essayer de faire en sorte que cela fonctionne.

J'utilise la JVM suivante au cas où cela serait important:

Version Java "1.7.0_75" Environnement d'exécution Java SE (version 1.7.0_75-b13) Serveur 64 bits Java HotSpot (TM) VM (version 24.75-b04, mode mixte) )

0
Martin Bayly