96 Stimmen

Fehlersuche in Maven?

Ist es möglich, einen Debugger wie jdb von Maven aus zu starten? Ich habe eine pom.xml Datei, die das Projekt erfolgreich kompiliert. Allerdings bleibt das Programm irgendwo hängen und ich würde gerne jdb oder einen entsprechenden Debugger starten, um zu sehen, was passiert.

Ich kompiliere mit mvn compile und starten Sie damit:

mvn exec:java -Dexec.mainClass="com.mycompany.app.App"

Ich hatte etwas erwartet wie:

mvn exec:jdb -Dexec.mainClass="com.mycompany.app.App"

um den Debugger zu starten, aber wie üblich sind meine Erwartungen nicht mit der Philosophie von Maven vereinbar.

Außerdem konnte ich keine Dokumentation (auf der Maven-Website oder bei Google) finden, die beschreibt, wie das Debugging funktioniert. Ich vermute, dass ich ein Plugin verwenden muss.

132voto

Pascal Thivent Punkte 548176

Wenn Sie Maven 2.0.8+ verwenden, führen Sie die mvnDebug Befehl anstelle von mvn und schließen Sie einen Debugger auf Port 8000 an.

Für Maven <2.0.8, deaktivieren Sie die folgende Zeile in Ihrem %M2_HOME%/bin/mvn.bat (und speichern Sie die geänderte Version vielleicht als mvnDebug.bat ):

@REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000

Weitere Einzelheiten unter MNG-2105 y Umgang mit der Eclipse-basierten IDE .

45voto

Samuel Yung Punkte 726

Wie Brian schon sagte, können Sie Remote-Debugging verwenden:

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 com.mycompany.app.App"

Dann können Sie in Ihrem Eclipse das Remote-Debugging verwenden und den Debugger mit localhost:1044 verbinden.

32voto

RickHigh Punkte 1708

Ich dachte, ich würde diese Antworten für OSX- und Linux-Anwender erweitern (nicht, dass sie es nötig hätten):

Ich bevorzuge die Verwendung von mvnDebug auch. Aber nach OSX maverick zerstört meine Java-Entwicklungsumgebung, ich bin von Grund auf neu und stubbled auf diesen Beitrag, und dachte, ich würde zu ihm hinzufügen.

$ mvnDebug vertx:runMod
-bash: mvnDebug: command not found

DOH! Ich habe es auf dieser Box nach dem neuen SSD-Laufwerk und/oder dem Zurücksetzen von Java, als ich Maverick installiert habe, nicht eingerichtet.

Ich verwende einen Paketmanager für OSX und Linux, daher habe ich keine Ahnung, wo mvn wirklich lebt. (Ich weiß es für kurze Zeit danke Gebräu Ich mag, dass ich das nicht weiß.)

Schauen wir mal:

$ which mvn
/usr/local/bin/mvn

Da bist du ja, du kleiner Mistkerl.

Wo sind Sie denn nun installiert worden?

$ ls -l /usr/local/bin/mvn

lrwxr-xr-x  1 root  wheel  39 Oct 31 13:00 /
                  /usr/local/bin/mvn -> /usr/local/Cellar/maven30/3.0.5/bin/mvn

Aha! Sie haben also in /usr/local/Cellar/maven30/3.0.5/bin/mvn installiert. Du freches kleines Build-Tool. Ohne Zweifel durch Homebrew...

Haben Sie Ihren kleinen Kumpel mvnDebug dabei?

$ ls /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug 
/usr/local/Cellar/maven30/3.0.5/bin/mvnDebug

Gut. Sehr gut. Sehr gut. Alles läuft wie geplant.

Und jetzt bringen Sie den kleinen Mistkerl dahin, wo ich mich leichter an ihn erinnern kann.

$ ln -s /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug /usr/local/bin/mvnDebug
  ln: /usr/local/bin/mvnDebug: Permission denied

Du verfluchter Computer... Du wirst dich meinem Willen unterwerfen. Wisst Ihr, wer ich bin? Ich bin SUDO! VERBEUGEN!

$ sudo ln -s /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug /usr/local/bin/mvnDebug

Jetzt kann ich es von Eclipse aus verwenden ( aber warum sollte ich das tun, wenn ich IntelliJ!!!! habe? )

$ mvnDebug vertx:runMod
Preparing to Execute Maven in Debug Mode
Listening for transport dt_socket at address: 8000

Intern verwendet mvnDebug dies:

MAVEN_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE  \
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"

Sie können ihn also ändern (ich debugge normalerweise auf Port 9090).

Dieser Blog erklärt, wie man Eclipse Remote Debugging einrichtet (schauder)

http://javarevisited.blogspot.com/2011/02/how-to-setup-remote-debugging-in.html

Dito Netbeans

https://blogs.oracle.com/atishay/entry/use_netbeans_to_debug_a

Dito IntelliJ http://www.jetbrains.com/idea/webhelp/run-debug-configuration-remote.html

Hier finden Sie einige gute Dokumente über den Befehl -Xdebug im Allgemeinen.

http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

"Xdebug aktiviert Debugging-Funktionen in der JVM, die von der Java Virtual Machine Tools Interface (JVMTI) verwendet werden. JVMTI ist eine Low-Level-Debugging-Schnittstelle, die von Debuggern und Profiling-Tools verwendet wird. Mit ihr können Sie den Zustand und die Ausführung von Anwendungen, die in der JVM laufen, überprüfen und kontrollieren.

"Die Teilmenge von JVMTI, die am häufigsten von Profilern verwendet wird, ist immer verfügbar. Die Funktionalität, die von Debuggern verwendet wird, um durch den Code zu schreiten und Haltepunkte zu setzen, ist jedoch mit einem gewissen Overhead verbunden und nicht immer verfügbar. Um diese Funktionalität zu aktivieren, müssen Sie die Option -Xdebug verwenden."

-Xrunjdwp:transport=dt_socket,server=y,suspend=n myApp

Sehen Sie sich auch die Dokumentation zu -Xrunjdwp an. Sie können es z.B. nur aktivieren, wenn eine bestimmte Ausnahme ausgelöst wird. Sie können es im angehaltenen oder laufenden Zustand starten. Wie auch immer Ich schweife ab.

27voto

abhihello123 Punkte 1558

Ich habe eine einfache Möglichkeit gefunden, dies zu tun -

Geben Sie einfach einen Befehl wie diesen ein -

>mvn -Dtest=TestClassName#methodname -Dmaven.surefire.debug test

Es beginnt mit dem Abhören des Ports 5005. Erstellen Sie nun einfach ein Remote-Debugging in Eclipse über Debug-Konfigurationen für localhost (beliebiger Host) und Port 5005.

Quelle. https://doc.nuxeo.com/display/CORG/How+zum+Debuggen+eines+Testlaufs+mit+Maven

8voto

magarciaschopohl Punkte 325

Wenn Sie Netbeans verwenden, gibt es dafür eine schöne Abkürzung. Definieren Sie einfach ein Ziel exec:java und fügen Sie die Eigenschaft jpda.listen=maven Netbeans screenshot

Getestet auf Netbeans 7.3

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X