Remote-Debugging von Tomcat mit Eclipse

94

Ich kann die Tomcat-Anwendung scheinbar nicht über Eclipse debuggen. Ich habe gesetzt

CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

und dann laufe ich bin/catalina.sh, wo ich Ausgang sehe es zuhört zu sagen dt_socketauf port 8000. Aber wenn ich versuche, eine Verbindung zum Port 8000in Eclipse herzustellen (indem ich einen Eintrag im Remote-Java-Anwendungsmenü hinzufüge), beschwert es sich über eine abgelehnte Verbindung. Irgendwelche Ideen?

Sieger
quelle
Können Sie bitte Ihre in Eclipse verwendete Remote-Konfiguration veröffentlichen?
Sean

Antworten:

132

Können Sie überprüfen, ob dies funktioniert?

JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

catalina.sh jpda start
Raghuram
quelle
4
Eigentlich haben Sie es behoben. Eclipse sagt eigentlich nichts, wenn die Verbindung erfolgreich hergestellt wurde, und ein zweites erneutes Verbinden erzwingt den Fehler. Es hat also funktioniert, aber ich habe es einfach nicht bemerkt.
Sieger
18
Dies ist für diejenigen unter Windows-Betriebssystem:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
Lee Chee Kiam
1
Was macht die Option suspend = n?
Trismegistos
2
@ Trismegistos. suspendGibt an, ob der JVM auf den Debugger warten oder fortfahren soll. Siehe dieses Dokument .
Raghuram
9
Sollte catalina.sh jpda starteigentlich reichen. Die JPDA_*Datei Catalina.sh verfügt über einige Parameter, mit denen beispielsweise der Port geändert werden kann. Eine Dokumentation finden Sie in der Datei.
Zpon
53

Ich habe einige Zeit damit verbracht, die richtigen Informationen zu erhalten.

Hier finden Sie Schritt für Schritt die detaillierten Informationen.

Umgebung: Windows 7

TomCat-Version: 7.0

IDE: Eclipse

Konfigurationen, die hinzugefügt werden müssen, um das Remote-Debugging mit in Tomcat zu ermöglichen, sind

-Xdebug
-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n

Ich empfehle die obige Konfiguration nicht für Nicht-Windows-Umgebungen. Um die obige Konfiguration hinzuzufügen, doppelklicken Sie auf den Tomcat-Server, der in der Serveransicht verfügbar ist. Hier finden Sie den folgenden Screenshot. Geben Sie hier die Bildbeschreibung ein

Fügen Sie nun die obige Konfiguration der Laufzeitumgebung zu Tomcat hinzu. Überprüfen Sie dazu den folgenden Screenshot.

Geben Sie hier die Bildbeschreibung ein

Gehen Sie nun zur Registerkarte "Arugments" unter "Startkonfigurationseigenschaften bearbeiten" (siehe Abbildung unten).

Geben Sie hier die Bildbeschreibung ein

Im Abschnitt GoTo VM-Argumente werden diese Zeilen hinzugefügt.

-Xdebug

-agentlib: jdwp = transport = dt_socket, address = 8000, server = y, suspend = n

Geben Sie hier die Bildbeschreibung ein

Jetzt muss die Debug-Schaltfläche in der Eclipse-Symbolleiste verfügbar sein.

Geben Sie hier die Bildbeschreibung ein

Suchen Sie in Debug-Konfigurationen nach "Remote Java Application" und doppelklicken Sie darauf.Geben Sie hier die Bildbeschreibung ein

Geben Sie im Feld Name einen beliebigen Namen ein.

Wählen Sie im Projektfeld mit der Schaltfläche Durchsuchen das Projekt aus, für das Sie ein Remote-Debugging durchführen möchten.

Der Hostname ist nichts anderes als die Hostadresse. Hier arbeite ich vor Ort, also ist es "localhost".

Zuletzt in der Spalte "Port" sollte der Wert 8000 sein. Abgesehen von den Textfeldern "Name" und "Projekt" werden die beiden anderen Spalten "Host" und "Port" von Eclipse selbst ausgefüllt, wenn Sie nicht dieselben Werte wie angegeben haben. Überprüfen Sie den Screenshot auf Informationen.Geben Sie hier die Bildbeschreibung ein

Klicken Sie nun mit der rechten Maustaste auf TomcatServer in der Serverkonsole und wählen Sie Hinzufügen und Entfernen aus dem Kontextmenü. In diesem Dialogfeld können Sie das Projekt zum Server hinzufügen.

Führen Sie nun den Tomcat-Server aus.

Geben Sie hier die Bildbeschreibung ein

Führen Sie nun die TomCatDebugConfiguration über das Debug-Tool aus.

Öffnen Sie zuletzt den internen oder externen Browser und führen Sie Ihr Projekt aus. Wenn die Ausführungssteuerung die Haltepunkte erreicht hat, fordert die Eclipse zur Debug-Perspektive auf.

Ravi MCA
quelle
47

Bearbeiten Sie im Tomcat-Bin-Verzeichnis, in dem sich catalina.batoder .shbefindet (auch bekannt als {CATALINA_BASE} / bin): (erstellen, wenn nicht vorhanden):

setenv.bat/.sh

Fügen Sie die folgende Zeile hinzu:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

Das ist alles, was Sie tun müssen, Sie müssen die catalina.bat(oder .sh) Datei nicht bearbeiten .

Siehe die Kommentare in catalina.batoder catalina.sh.

Möglicherweise müssen Sie die Syntax an Ihre spezielle Umgebung / Situation anpassen. Wenn Sie beispielsweise CATALINA_OPTS bereits definiert haben, können Sie Folgendes tun (in einer Windows-Umgebung):

set CATALINA_OPTS=%CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8088,server=y,suspend=n

So debuggen Sie in Eclipse:

run-> Debug-Konfigurationen ...-> Remote Java Application-> New

und geben Sie einen Namen, das Projekt, das Sie debuggen, sowie den oben angegebenen Tomcat-Host und Debug-Port an.

karl
quelle
Dies funktioniert. Sie müssen dieses CATALINA_OPTS in setenv.sh festlegen, das sich im Verzeichnis tomcat / bin befindet. Vielen Dank.
Amit Kumar
1
In meiner setenv.bat war es JAVA_OPTS (Kater 7)
vikingsteve
Hallo Philip, habe einige Hinweise hinzugefügt, die helfen könnten, wenn nicht: Welche OS-, Tomcat- und Eclipse-Versionen verwenden Sie?
Karl
in setenv.bat das binVerzeichnis setzen Sie eine Zeile wie set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n, verwenden Sie startup.bat, um Tomcat zu starten
Paramvir Singh Karwal
33

In der catalina.batDatei ändern Sie bitte die folgenden.

  • Schritt 1: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

  • Schritt 2: JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

  • Schritt 3: Führen Sie Tomcat an der Eingabeaufforderung wie folgt aus: catalina.sh jpda start

  • Schritt 4: Erstellen Sie dann in der Eclipse eine Debug-Konfiguration

    1. Geben Sie einen beliebigen Namen für die Konfiguration an.
    2. Gib das project name.
    3. Geben Sie den Verbindungstyp als an Standard(Socket Attach)
    4. Host als localhost
    5. Port als 8000(oder eine beliebige Portnummer, aber das sollte auch an anderen Stellen gleich sein).
RAJ
quelle
Ich habe CATALINA_OPTS in den folgenden Teilen unter Catalina.bat gefunden: doStop Shift Set ACTION = Stop Set CATALINA_OPTS = gehe zu execCmd: doConfigTest Shift Set ACTION = Configtest Set CATALINA_OPTS = gehe zu ExecCmd Wo soll es bearbeitet werden? Können Sie einfach den Inhalt Ihrer Catalina.bat hochladen?
Gopakumar NG
Scheint, als würden Sie zweimal dasselbe schreiben. Ich habe Ihren Schritt 1 übersprungen - und es funktioniert. Können Sie bestätigen, dass CATALINA_OPTS nicht geändert werden muss?
Henry Aloni
Für den Unterschied zwischen siehe CATALINA_OPTS & JPDA_OPTS siehe: stackoverflow.com/questions/11222365/…
Mike R
1
Dies wird in Tomcat 8 nicht funktionieren. Damit es in Tomcat 8 funktioniert, müssen Sie Schritt 1 weglassen.
Dave
@RAJ. In Tomcat 6 hat es total funktioniert. Vielen Dank.
T8Z
7

Viele der obigen Antworten sind korrekt, aber denken Sie daran, dass der Debugger standardmäßig nur localhost überwacht. Wenn Sie einen Remote-Server debuggen, müssen Sie beispielsweise die IP-Adresse angeben, die abgehört werden soll

JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, address = 10.1.1.33 : 8000, server = y, suspend = n"

katalina.sh jpda starten

Beachten Sie, dass die Adresse jetzt 10.1.1.33 : 8000 lautet

Natürlich können Sie auch überprüfen, welche IP tatsächlich verwendet wird, indem Sie ausführen

netstat -an

unter Windows und Linux und filtern Sie den Port mit find(Windows) oder grep(Linux) heraus.

TUPFEN
quelle
Ich denke du meinst, welcher PORT tatsächlich verwendet wird, nicht welche IP .
Abdollah
1
Nein, ich meine "IP-Adresse". Wenn Sie Remote-Debugging (von einem anderen Computer) durchführen, müssen Sie in der Lage sein, eine IP-Adresse anzugeben, die sich von localhost oder 127.0.0.1 unterscheidet. Natürlich benötigen Sie immer auch die Portnummer.
DAB
5

Lassen Sie mich die einfache Möglichkeit zum Aktivieren des Remote-Debugging-Modus in Tomcat7 mit Eclipse (Windows) erläutern.

Schritt 1: Öffnen Sie die Datei bin / startup.bat.
Schritt 2: Fügen Sie die folgenden Zeilen zum Debuggen mit der JDPA-Option hinzu (die Zeile der Datei sollte beginnen).

    set JPDA_ADDRESS=8000  
    set JPDA_TRANSPORT=dt_socket  

Schritt 3: in derselben Datei .. zum Ende der Datei gehen diese Zeile ändern -

    call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%  
    instead of line  
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%  

Schritt 4: Führen Sie dann einfach bin> startup.bat aus (Ihr Tomcat-Server wurde jetzt im Remote-Modus mit Port 8000 ausgeführt).

Schritt 5: Danach können Sie Ihr Quellprojekt per Eclipse-IDE mit dem Remote-Client verbinden.

Schritt 6: Gehen Sie in der Eclipse-IDE zu "Debug-Konfiguration".

Schritt 7: Klicken Sie auf "Remote Java Application" und dann auf "New".

Schritt 8. Stellen Sie auf der Registerkarte "Verbinden" den Parameterwert ein

   project= your source project  
   connection Type: standard (socket attached)   
   host: localhost  
   port:8000  

Schritt 9: Klicken Sie auf Übernehmen und Debuggen.

Schließlich ist Ihr Eclipse-Remoteclient mit dem laufenden Tomcat-Server verbunden (Debug-Modus).

Hoffe, dieser Ansatz könnte Ihnen helfen.

Grüße..

Mayen
quelle
4

Ändern Sie Catalina.bat, um es hinzuzufügen

set JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n" 

und

CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

Optional: Fügen Sie die folgende Zeile hinzu, um den Debug-Modus standardmäßig auszuführen, wenn Sie startup.bat ausführen

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

Eclipse oder STS wählen Debug-Konfiguration mit der rechten Maustaste -> neu

connection type -> Standard socket Attach
Port -> 8000 (as given in the CATALINA_OPTS)
Host -> localhost or IP address
shermi
quelle
Diese Informationen sind für WINDOWS, aber ich war zufällig auf Windows und es hat mir geholfen. Vielen Dank!
Ring
4

Führen Sie einfach ./catalina.sh jpda start(Gabeln) oder ./catalina.sh jpda run(keine Gabelung, nicht in der Hilfe erwähnt). Alle hier genannten Optionen verwenden standardmäßig normale Werte.

atamanroman
quelle
2

Wenn immer noch alle oben genannten Funktionen nicht funktionieren, können Sie sie jederzeit zum Skript hinzufügen

    set "JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
Shachar
quelle
2

In tomcat 7 hat Catalina.sh diesen Code:

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

Ii impliziert, dass Sie JPDA einrichten können mit:

export JPDA_TRANSPORT=dt_socket
export JPDA_ADDRESS=8000
export JPDA_SUSPEND=n

Oder mit:

JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

Und zum Schluss:

catalina.sh jpda start

Grüße

Marcelo Salazar
quelle
Tomcat 8: Die JPDA_-Variablen können in setenv.sh festgelegt werden, ohne dass sie exportiert werden müssen. In jedem Fall muss der erste Parameter des Startaufrufs 'jpda' sein. Wenn Sie tomcat als Dienst starten, ändern Sie am besten das Skript $ {CATALINA_HOME} /bin/startup.sh und fügen Sie den Parameter 'jpda' in der letzten Zeile vor 'start' hinzu: ´´exec "$ PRGDIR" / "$ EXECUTABLE "jpda start" $ @ "´´.
Heri
1

Ich habe dieses Problem festgestellt, als ich Tomcat in einem Docker-Container ausgeführt habe. Um dies zu beheben, stellen Sie sicher, dass Sie das Argument '-p 8000: 8000' in Ihren Docker-Ausführungsbefehl einfügen, um diesen Port für Ihren lokalen Computer verfügbar zu machen. Natürlich benötigen Sie die Datei setenv.sh auch in Ihrem $ {CATALINA_HOME} / bin / in Ihrem Container.

Cheen
quelle
0

Das Ändern der Datei startup.bat mit CATALINA_OPTS AND JPDA_OPTS hat bei mir nicht funktioniert, aber das Hinzufügen zu Catalina.bat hat funktioniert

  1. Ändern Sie Catalina.bat

CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, address = 8000, server = y, suspend = n"

JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, address = 8000, server = y, suspend = n"

  1. Ändern Sie startup.bat so, dass es jpda enthält

Ändern Sie den Aufruf "% EXECUTABLE%" in% CMD_LINE_ARGS% in

Rufen Sie "% EXECUTABLE%" auf. jpda start% CMD_LINE_ARGS%

Konfigurieren Sie dann die Remote-Java-Anwendung in Ihren Debug-Konfigurationen in Eclipse.

David Stableforth
quelle
0

Wenn Sie Catalina.bat mit dem Texteditor öffnen, sehen Sie zunächst Folgendes: "Legen Sie die Variablen in diesem Skript nicht fest ....." Ändern Sie sie also niemals in diesem Skript, sondern führen Sie die folgenden Schritte aus:

  1. Es wird empfohlen, eine neue Bat-Datei mit dem Namen "setenv.bat" zu erstellen.
  2. Setzen Sie dann 2 Variablen in dieser Bat-Datei wie:

    set CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, address = 8000, server = y, suspend = n"

    set JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, address = 8000, server = y, suspend = n"

  3. Zuletzt führen Sie das bei cmd aus, dass: "catalogina.bat jpda start"

  4. Erstellen Sie in IDE eine Remote-Debug-Konfiguration und setzen Sie den Host auf die zugehörige Server-IP und den Port auf 8000.

Mustafa Kemal
quelle
0

Für die Version apache-tomcat-8.5.28 tun Sie dies einfach,

catalina.bat jpda start

Als Standardeinstellungen bereits für uns in Catalina.bat als konfiguriert

Wenn nicht "% JPDA_OPTS%" == "" gehe zu gotJpdaOpts set JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, address =% JPDA_ADDRESS%, server = y, suspend =% JPDA_SUSPEND%

Also keine andere Konfiguration nötig. Wenn Sie den Befehl catalogina.bat jpda start ausführen, sehen Sie, dass der Debug-Port 8000 geöffnet ist.

Lyju ich Edwinson
quelle
-2

Für Apache-Tomcat-8.5.28

Ändern Sie JDPA_OPTSwie unten und führen Sie dann wie auscatalina.bat jpda start

JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=8000,server=y,suspend=$JPDA_SUSPEND"
Madhu K.
quelle