Quel est le moyen le plus simple de déboguer le code Scala géré par sbt à l'aide du débogueur intégré d'IntelliJ? La documentation de "RunningSbt" du site de code google de sbt répertorie les commandes pour exécuter la classe principale pour un projet ou les tests, mais il ne semble y avoir aucune commande pour le débogage.
Question de suivi: quel est le moyen le plus simple d'attacher le débogueur d'IntelliJ à Jetty lors de l'utilisation de la commande jetty-run de sbt?
scala
intellij-idea
jetty
sbt
Matthieu
la source
la source
Réponses:
Pour le débogage ordinaire dans IntelliJ, vous pouvez utiliser une configuration d'exécution / débogage d'application de la manière habituelle, que vous utilisiez ou non sbt pour compiler votre code.
Pour vous connecter à votre application exécutée dans Jetty, vous devez créer une configuration de débogage à distance. Lorsque vous le faites, IntelliJ vous donnera un ensemble d'arguments de ligne de commande pour exécuter la JVM distante - quelque chose comme
Lancez sbt avec ces arguments, puis exécutez
jetty-run
. Enfin, lancez votre configuration de débogage à distance dans IntelliJ. Ce fil pourrait être utile.la source
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
jetty-run
à l'invite sbt.sbt -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
?sbt -jvm-debug 5005
.Il y a un
-jvm-debug
drapeau très pratique dans les packages SBT officiels pour Mac, Linux et Windows . Vous pouvez utiliser l'indicateur pour spécifier le port de débogage:Sous les couvertures , cela démarre la JVM pour SBT avec l'incantation typique de débogage verbeux:
Vous pouvez maintenant exécuter votre code normalement, par exemple avec la
run
commande sbt .Configuration d'IntelliJ pour se connecter au code en cours d'exécution ...
Vous connectez maintenant IntelliJ à votre processus en cours d'exécution à l'aide d'une configuration de débogage à distance . Notez que les 3 champs supérieurs de ce formulaire, bien qu'effrayants, sont juste pour vous de copier du texte hors de, plutôt que dans (ils donnent l'incantation de débogage détaillée spécifiée ci-dessus, qui
-jvm-debug
prend déjà en charge pour vous) - la seule configuration vous pouvez changer est dans laSettings
section à mi-chemin:la source
-jvm-debug
paramètre et à le soumettre en tant que pull request - vous avez de bonnes chances de profiter à tous ceux qui se trouvent sur la même plate-forme.J'ai eu quelques problèmes avec cela aussi, donc au risque d'être trop détaillé, voici ce que j'ai fait:
INSTALLER
Créer une configuration d'exécution pour sbt jetty-run
Créer une configuration de débogage pour le débogage à distance
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
(assurez-vous de cliquer sur OK pour créer la configuration)Configurer le plugin sbt pour exécuter les options vm ci-dessus
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
dans la boîte des paramètres de la VM, après ceux qui y sont déjàDÉBOGAGE
la source
sbt -jvm-debug 5005 console
, puis de définir le point d'arrêt dans intelllJ Idea, d'exécuter le débogage.sbt -jvm-debug 5005 console
n'a pas fonctionné pour moi, maissbt -jvm-debug 5005
a fonctionné.Celui-ci fonctionne pour moi à chaque fois, et la seule chose que vous devez configurer est le débogage à distance dans IntelliJ; Je démarre SBT avec les paramètres JVM depuis le terminal dans IntelliJ:
Après cela, je peux démarrer le débogage à distance sur localhost: 5005
la source
J'ajoute une autre réponse ici, car j'ai trouvé cette question en recherchant un problème connexe: le débogage des classes de test à l'aide de points d'arrêt.
J'utilise ScalaTest et j'exécute généralement une suite en utilisant la commande «test-only» de sbt. Maintenant, lorsque je veux utiliser le débogueur interactif, je peux faire ce qui suit:
Créez une nouvelle configuration Run / Debug de type 'ScalaTest', mettez le nom principal "Test Class:" et choisissez "Before launch: Run SBT Action 'test-compile'". Voilà, vous pouvez maintenant placer des points d'arrêt dans les sources de test et exécuter cette configuration.
la source
Aucune de ces réponses ou liens fournis n'a fonctionné pour moi, donc une fois que j'ai compris cela, j'ai pensé que je partagerais ...
y compris la compréhension de fond que je n'avais pas quand j'ai commencé ...
Ceci est basé principalement sur les instructions ici avec des explications supplémentaires qui m'ont guidé.
Mon environnement: Scala 2.10.2, SBT 0.13 et IntelliJ 13.1
Contexte:
Qu'est-ce que le débogage?
Qu'est-ce que le débogage à distance?
En référence au lien ci-dessus, les explications / modifications suivantes sont utiles:
la source
J'ai également eu du mal à déboguer sur Windows avec une application Spray-can / Akka / Scala construite via SBT, en utilisant Intellij. Rassemblant diverses suggestions, l'approche la plus simple pour moi était:
Assurez-vous que vous avez sbt.Revolver dans votre fichier project / plugsin.sbt, par exemple
addSbtPlugin ("io.spray"% "sbt-revolver"% "0.7.1")
Définissez javaoptions dans votre fichier build.sbt:
javaOptions: = Seq ("- Xdebug", "-Xrunjdwp: transport = dt_socket, server = y, suspend = y, address = 5005")
En particulier, utilisez l'option suspend = y. Cela tiendra l'application jusqu'à ce que vous connectiez un débogueur distant d'Intellij
Configurez une configuration de débogueur dans Intellij via le menu Exécuter / Modifier les configurations. Appuyez sur le bouton +, sélectionnez l'option "Remote". Assurez-vous que les entrées correspondent aux options java ci-dessus, en particulier l'adresse du port 5005. Donnez à la configuration un nom comme «Spray».
Depuis votre console SBT, utilisez la commande re-start. Vous devriez voir l'adresse du port 5005 dans la sortie de retour.
Dans Intellij, définissez vos points d'arrêt.
Depuis Intellij, sélectionnez Run \ Debug 'Spray'. Cela devrait se connecter au serveur Web du spray-can. Vous devriez pouvoir voir beaucoup de threads dans la fenêtre de débogage.
Sachez que certaines des directives Get de Spray semblent être exécutées au démarrage mais pas à plusieurs reprises lors de l'appel du site Web.
la source
En utilisant Scala 2.10 et SBT 0.12, je l'ai fait fonctionner comme ceci: http://tuliodomingos.blogspot.com.es/2014/01/scala-remote-debugging-in-sbts-jetty.html
la source
Pour ce que cela vaut pour Windows, modifiez
%SBT_HOME%\bin\sbt.bat
et localisez les lignes de code suivantes:puis remplacez-les par ce code:
Le mieux que je puisse faire pour avoir le même comportement
-jvm-debug
lorsque vu dans le lanceur de script BashNB. Je ne pense pas qu'il
%SBT_HOME%
existe réellement en dehors de ce script, à moins que vous ne l'ayez créé explicitement dans votre environnement, mais de toute façon vous comprenez: Dla source
File-> Settings-> Other Settings-> SBT VM parameters -Xmx512M -XX: MaxPermSize = 256M -Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = n, address = 5005
Exécuter-> Modifier les configurations Appuyez sur + puis sélectionnez la télécommande Appuyez sur Appliquer
Maintenant dans la console SBT (démarré à l'intérieur par intelliJ) lorsque vous exécutez la commande 'run', vous verrez "Écoute du transport dt_socket à l'adresse: 5005"
Maintenant, appuyez sur Exécuter-> Déboguer. Vous verrez les menus de débogage ci-dessous activés. Il a deux onglets Debugger et Console.
Utilisez F7 pour passer de la ligne suivante à la suivante
J'ai choisi de suspendre pour être n. Avec ça, quand j'ai exécuté la commande run, c'était bloqué
la source
essaye ça
la source
J'ai aussi le même problème, j'aime partager comment j'ai résolu. Au fait, j'utilise Ubuntu 14.04 et IntelliJ 15.
Dans Paramètres -> SBT -> Collé sous la ligne dans la zone de texte Paramètres VM:
-XX: MaxPermSize = 384M -Xdebug -Xrunjdwp: transport = dt_socket, serveur = y, suspend = n, adresse = 5005
Ouverture de Termilal dans IntelliJ et exécution:
sbt -jvm-debug 5005
Remarque: vous devriez voir cette ligne dans le terminal: "Écoute du transport dt_socket à l'adresse: 5005"
Modifier les configurations -> Cliquez sur + -> Sélectionnez 'À distance'
Sélectionnez DebugMyModule dans la zone de
Edit Configurations
liste et cliquez sur Déboguer .Remarque: Vous devriez voir la vue de débogage ouverte et dans la console de débogage Vous devriez pouvoir voir «Connecté à la machine virtuelle cible, adresse:,
'127.0.0.1:5005'
transport: 'socket'»Mettez des points d'arrêt dans quelques cas de test dans votre classe de test.
Accédez au terminal où vous exécutez "
sbt -jvm-debug 5005
" et exécutez comme ci-dessousPar exemple: com.myproject.module.AddServiceTest [Spec]
Vous pouvez voir le débogage démarré dans votre point d'arrêt de scénario de test.
la source
Le plugin AttachMe IntelliJ est un moyen potentiellement plus rapide d'attacher le débogueur sans avoir à manipuler les numéros de port:
Le blog et le fichier Lisez -moi ont des instructions de configuration, mais j'ai dû les modifier un peu pour que cela fonctionne sur ma machine
Télécharger le
installer.sh
script depuis le dépôt officielchmod u+x installer.sh
./installer.sh
/.config/attachme/agent.jar
et créer un~/.attachme
fichierModifier
~/.attachme
pour contenirInstallez le plugin Attachme correspondant et redémarrez:
IntelliJ | Preferences | Plugins
Attachme
une configuration d'exécution:Run | Edit configurations... | Add new configuration | Attachme debugger registry | OK
Après ces manigances ponctuelles, nous pouvons attacher automatiquement un débogueur en
Attachme
configuration de l'exécutionsource ~/.attachme
sbt "runMain example.Hello"
la source
Selon la réponse de Roberto Tyley ci-dessus, mais sous Windows, nous devons également définir les variables d'environnement suivantes après l'installation de sbt:
SBT_HOME
C: \ Program Files (x86) \ sbt \
[ou partout où sbt est installé]
SBT_OPTS
-Xdebug -runjdwp: transport = dt_socket, serveur = y, suspend = n, adresse = 5005
[par exemple IntelliJ de RT]
Ajouter au chemin:% SBT_HOME% \ bin;% SBT_OPTS%
Exécutez ensuite ce qui suit dans la ligne de commande dans le dossier du projet "sbt run -jvm -debug 5005".
Si cela fonctionne correctement, la ligne de commande affichera initialement une ligne re "Écoute du transport dt_socket à l'adresse: 5005".
Définissez le point d'arrêt dans IntelliJ.
Ouvrez le site Web dans le navigateur pour déclencher le point d'arrêt du débogueur, par exemple " http: // localhost: 9000 / ".
la source