Was ist der einfachste Weg, um von sbt verwalteten Scala-Code mit dem in IntelliJ integrierten Debugger zu debuggen? In der Dokumentation von "RunningSbt" von der Google-Code-Site von sbt sind Befehle zum Ausführen der Hauptklasse für ein Projekt oder die Tests aufgeführt. Es scheint jedoch keine Befehle zum Debuggen zu geben.
Folgefrage: Was ist der einfachste Weg, den IntelliJ-Debugger an Jetty anzuhängen, wenn Sie den Befehl jbt-run von sbt verwenden?
scala
intellij-idea
jetty
sbt
Matthew
quelle
quelle
Antworten:
Für das normale Debuggen in IntelliJ können Sie eine Anwendungsausführungs- / Debug-Konfiguration auf die übliche Weise verwenden, unabhängig davon, ob Sie sbt zum Kompilieren Ihres Codes verwenden.
Um eine Verbindung zu Ihrer Anwendung herzustellen, die in Jetty ausgeführt wird, müssen Sie eine Remote-Debug-Konfiguration erstellen. Wenn Sie dies tun, gibt Ihnen IntelliJ eine Reihe von Befehlszeilenargumenten zum Ausführen der Remote-JVM - so etwas wie
Starten Sie sbt mit diesen Argumenten und führen Sie es aus
jetty-run
. Starten Sie abschließend Ihre Remote-Debug-Konfiguration in IntelliJ. Dieser Thread könnte nützlich sein.quelle
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
jetty-run
Führen Sie dann an der Eingabeaufforderung sbt aus.sbt -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
?sbt -jvm-debug 5005
.-jvm-debug
In den offiziellen SBT-Paketen für Mac, Linux und Windows gibt es eine sehr praktische Flagge . Mit dem Flag können Sie den Debug-Port angeben:Unter dem Deckmantel startet dies die JVM für SBT mit der typischen ausführlichen Debugging-Beschwörung:
Sie können Ihren Code jetzt wie gewohnt ausführen, beispielsweise mit dem
run
Befehl sbt .Konfigurieren von IntelliJ für die Verbindung mit dem laufenden Code ...
Jetzt verbinden Sie IntelliJ mithilfe einer Remote-Debug-Konfiguration mit Ihrem laufenden Prozess . Beachten Sie, dass die oberen drei Felder in diesem Formular zwar beängstigend sind, aber nur zum Kopieren von Text und nicht zum Kopieren dienen (sie geben die oben angegebene ausführliche Beschwörungsbeschwörung an, die sich
-jvm-debug
bereits um Sie kümmert) - die einzige Konfiguration Sie können ändern, ist in demSettings
Abschnitt auf halber Höhe:quelle
-jvm-debug
Parameter zu akzeptieren , und dies als Pull-Anfrage einzureichen. Sie haben gute Chancen, allen zu helfen, die sich auf derselben Plattform befinden.Ich hatte auch einige Probleme damit. Auf die Gefahr hin, zu detailliert zu werden, habe ich Folgendes getan:
KONFIGURATION
Erstellen Sie eine Ausführungskonfiguration für sbt jetty-run
Erstellen Sie eine Debug-Konfiguration für das Remote-Debugging
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
(klicken Sie auf OK, um die Konfiguration tatsächlich zu erstellen).Richten Sie das sbt-Plugin ein, um die oben genannten VM-Optionen auszuführen
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
in das Feld VM-Parameter nach den bereits vorhandenen einDEBUGGING
quelle
sbt -jvm-debug 5005 console
, setze dann den Haltepunkt in der intelligenten Idee und führe das Debuggen aus.sbt -jvm-debug 5005 console
hat bei mir nicht funktioniert, abersbt -jvm-debug 5005
funktioniert.Dieser funktioniert jedes Mal für mich, und das einzige, was Sie einrichten müssen, ist das Remote-Debugging in IntelliJ. Ich starte SBT mit JVM-Parametern vom Terminal in IntelliJ:
Danach kann ich mit dem Remote-Debugging auf localhost: 5005 beginnen
quelle
Ich füge hier eine weitere Antwort hinzu, da ich diese Frage beim Nachschlagen eines verwandten Problems gefunden habe: Debuggen von Testklassen mithilfe von Haltepunkten.
Ich verwende ScalaTest und führe normalerweise eine Suite mit dem Befehl 'test-only' von sbt aus. Wenn ich jetzt den interaktiven Debugger verwenden möchte, kann ich Folgendes tun:
Erstellen Sie eine neue Run / Debug-Konfiguration vom Typ 'ScalaTest', geben Sie den Hauptnamen "Test Class:" ein und wählen Sie "Vor dem Start: SBT-Aktion 'test-compile' ausführen". Das war's, Sie können jetzt Haltepunkte in den Testquellen platzieren und diese Konfiguration ausführen.
quelle
Keine dieser Antworten oder bereitgestellten Links funktionierte für mich. Sobald ich das herausgefunden hatte, dachte ich, ich würde ...
einschließlich des Hintergrundverständnisses, das ich nicht hatte, als ich anfing ...
Dies basiert hauptsächlich auf den Anweisungen hier, nur mit zusätzlichen Erklärungen, die mich durch die Anweisungen geführt haben .
Meine Umgebung: Scala 2.10.2, SBT 0.13 und IntelliJ 13.1
Hintergrund:
Was ist Debugging?
Was ist Remote-Debugging?
Unter Bezugnahme auf den obigen Link sind die folgenden Erklärungen / Änderungen hilfreich:
quelle
Ich habe Probleme mit dem Debuggen unter Windows mit einer Spray-can / Akka / Scala-App, die über SBT mit Intellij erstellt wurde. Der einfachste Ansatz für mich war, verschiedene Vorschläge zusammenzusetzen:
Stellen Sie sicher, dass Sie sbt.Revolver in Ihrer Datei project / plugsin.sbt haben, z
addSbtPlugin ("io.spray"% "sbt-revolver"% "0.7.1")
Legen Sie javaoptions in Ihrer build.sbt-Datei fest:
javaOptions: = Seq ("- Xdebug", "-Xrunjdwp: transport = dt_socket, server = y, suspend = y, address = 5005")
Verwenden Sie insbesondere die Option suspend = y. Dadurch bleibt die App erhalten, bis Sie einen Remote-Debugger von Intellij aus verbinden
Richten Sie eine Debugger-Konfiguration in Intellij über das Menü Konfigurationen ausführen / bearbeiten ein. Drücken Sie die Taste + und wählen Sie die Option "Remote". Stellen Sie sicher, dass die Einträge mit den oben genannten Java-Optionen übereinstimmen, insbesondere mit der Portadresse von 5005. Geben Sie der Konfiguration einen Namen wie 'Spray'.
Verwenden Sie auf Ihrer SBT-Konsole den Befehl zum Neustart. Die 5005-Portadresse sollte im Feedback-Ausgang angezeigt werden.
Setzen Sie in Intellij Ihre Haltepunkte.
Wählen Sie in Intellij Run \ Debug 'Spray' aus. Dies sollte eine Verbindung zum Sprühdosen-Webserver herstellen. Sie sollten in der Lage sein, viele Threads im Debug-Fenster zu sehen.
Beachten Sie, dass einige der Get-Anweisungen in Spray beim Start ausgeführt werden, jedoch nicht wiederholt beim Aufrufen der Website.
quelle
Mit Scala 2.10 und SBT 0.12 funktionierte es folgendermaßen: http://tuliodomingos.blogspot.com.es/2014/01/scala-remote-debugging-in-sbts-jetty.html
quelle
Bearbeiten
%SBT_HOME%\bin\sbt.bat
und suchen Sie die folgenden Codezeilen , um Windows-Benutzer zu unterstützen :Ersetzen Sie sie dann durch diesen Code:
Das Beste, was ich tun kann, um das gleiche Verhalten zu erzielen,
-jvm-debug
wenn es im Bash-Skriptstarter angezeigt wirdNB. Ich glaube nicht, dass es
%SBT_HOME%
tatsächlich außerhalb dieses Skripts existiert, es sei denn, Sie haben explizit in Ihrer Umgebung erstellt, aber trotzdem verstehen Sie den Punkt: D.quelle
Datei-> Einstellungen-> Andere Einstellungen-> SBT-VM-Parameter -Xmx512M -XX: MaxPermSize = 256M -Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = n, address = 5005
Ausführen-> Konfigurationen bearbeiten Drücken Sie + und wählen Sie dann Remote. Drücken Sie Übernehmen
Wenn Sie jetzt in der SBT-Konsole (von IntelliJ gestartet) den Befehl 'run' ausführen, wird "Auf Transport dt_socket unter der Adresse 5005 warten" angezeigt.
Drücken Sie nun Run-> Debug. Sie sehen die Debug-Menüs unten aktiviert. Es hat zwei Registerkarten Debugger und Konsole.
Verwenden Sie F7, um von der nächsten Zeile zur nächsten zu gelangen
Ich habe suspend gewählt, um n zu sein. Als ich den Befehl run ausführte, steckte er fest
quelle
Versuche dies
quelle
Ich habe auch das gleiche Problem, ich teile gerne mit, wie ich es gelöst habe. Ich benutze übrigens Ubuntu 14.04 und IntelliJ 15.
Unter Einstellung -> SBT -> Unter der Zeile im Textfeld VM-Parameter einfügen:
-XX: MaxPermSize = 384M -Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = n, address = 5005
Termilal in IntelliJ geöffnet und ausführen:
sbt -jvm-debug 5005
Hinweis: Diese Zeile sollte im Terminal angezeigt werden: "Abhören des Transports dt_socket unter der Adresse: 5005"
Konfigurationen bearbeiten -> Klicken Sie auf + -> Wählen Sie 'Remote'
Wählen Sie im
Edit Configurations
Listenfeld DebugMyModule aus und klicken Sie auf Debug .Hinweis: Die Debug-Ansicht sollte geöffnet sein und in der Debug-Konsole sollte "Verbunden mit der Ziel-VM, Adresse :
'127.0.0.1:5005'
, Transport: 'Socket'" angezeigt werden.Fügen Sie in Ihrer Testklasse in einigen Testfällen Haltepunkte ein.
Kommen Sie zum Terminal, wo Sie "
sbt -jvm-debug 5005
" laufen und wie unten laufenZum Beispiel: com.myproject.module.AddServiceTest [Spec]
Sie können sehen, dass das Debuggen in Ihrem Testfall-Haltepunkt gestartet wurde.
quelle
Das AttachMe IntelliJ-Plugin ist möglicherweise schneller, wenn Sie den Debugger anhängen, ohne mit den Portnummern herumspielen zu müssen:
Blogpost und Readme haben Setup-Anweisungen, aber ich musste sie ein wenig ändern, damit es auf meinem Computer funktioniert
installer.sh
Skript vom offiziellen Repo herunterladenchmod u+x installer.sh
./installer.sh
/.config/attachme/agent.jar
und eine~/.attachme
Datei erstellenÄndern, um
~/.attachme
zu enthaltenInstallieren Sie das entsprechende Attachme-Plugin und starten Sie es neu:
IntelliJ | Preferences | Plugins
Attachme
:Run | Edit configurations... | Add new configuration | Attachme debugger registry | OK
Nach diesen einmaligen Spielereien können wir automatisch einen Debugger anhängen
Attachme
Ausführungskonfigurationsource ~/.attachme
sbt "runMain example.Hello"
quelle
Gemäß der obigen Antwort von Roberto Tyley, aber unter Windows müssen wir nach der Installation von sbt auch die folgenden Umgebungsvariablen festlegen:
SBT_HOME
C: \ Programme (x86) \ sbt \
[oder wo immer sbt installiert ist]
SBT_OPTS
-Xdebug -runjdwp: transport = dt_socket, server = y, suspend = n, address = 5005
[gemäß dem IntelliJ-Beispiel von RT]
Zum Pfad hinzufügen:% SBT_HOME% \ bin;% SBT_OPTS%
Führen Sie dann in der Befehlszeile im Projektordner "sbt run -jvm -debug 5005" Folgendes aus.
Wenn dies ordnungsgemäß funktioniert, gibt die Befehlszeile zunächst eine Zeile zu "Abhören des Transports dt_socket unter der Adresse: 5005" aus.
Haltepunkt in IntelliJ setzen.
Öffnen Sie die Website im Browser, um den Debugger-Haltepunkt auszulösen, z. B. " http: // localhost: 9000 / ".
quelle