Java-Code mit JPDA debuggen: Protokolle vereinfachen den Prozess

Falls man Socket als Transport verwenden muss, sollte man die Art des Transports im entsprechenden JVM-Argument mit dem Namen dt_socket angeben. Falls sich Debugger und Debuggee auf demselben Windows-Rechner befinden, kann man auch den Shared-Memory-Connector mit dem Namen dt_shmem verwenden. Will man seine Anwendung mit einem JPDA-konformen Debugger debuggen, sollte man diesen einfach mit aktiviertem Debug-Modus ausführen und zusätzliche Parameter wie Art des Transports, Hostnamen und Port-Nummern sowie weitere Informationen übergeben. Alle JPDA- und Debugging-Parameter müssen beim Start der Anwendung als Argumente der Java VM übergeben werden.

Um Debugging zu aktivieren, sollte der JDWP-Agent zum Debuggen in die JVM der Anwendung geladen werden. Seit Java 5.0 kann man dies mit der Option -agentlib:jdwp erreichen. Bei älteren Releases als 5.0 werden die Optionen -Xdebug und -Xrunjdwp verwendet. Die 5.0-Implementierung unterstützt außerdem die Optionen -Xdebug und -Xrunjdwp, aber die neuere Option –agentlib:jdwp sollte bevorzugt verwendet werden, da der JDWP-Agent in 5.0 das JVMTI-Interface statt des älteren JVMDI-Interfaces als Verbinndung zur VM verwendet. Es ist empfehlenswert, dem jeweiligen Parameter (-agentlib:jdwp in Java 5.0 oder -Xrunjdwp vor Java 5.0) weitere Suboptionen mitzugeben. Die möglichen Suboptionen sind bei beiden Parametern identisch.

Die Suboptionen werden wie folgt angegeben:


-agentlib:jdwp=<name1>[=<value1>],<name2>[=<value2>]...

oder


-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...

Die folgenden Optionen stehen zur Verfügung:

  • help: Gibt einen kurzen Benutzungshinweise aus und beendet die VM.
  • server: („n“ oder „y“) Bei „y“ wird auf die Verbindung mit einer Debugger-Anwendung gewartet, ansonsten wird die Verbindung mit der Debugger-Anwendung unter der angegebenen Adresse hergestellt.
  • address: Transport-Adresse für die Verbindung. Wenn server=n ist, wird versucht, die Verbindung zur Debugger-Anwendung unter dieser Adresse herzustellen. Wenn server=y ist, wird auf eine Verbindung unter dieser Adresse gewartet.
  • timeout: Wenn server=y ist, gibt dies die Zeit in Millisekunden an, die auf die Verbindung mit dem Debugger gewartet wird. Wenn server=n ist, gibt dies den Timeout in Millisekunden an, der für die Verbindung mit dem Debugger verwendet wird.
  • suspend: Falls „y“, unterbricht die JVM die Ausführung, bis ein Debugger mit der JVM des Debuggees verbunden ist.

Hier ein paar Beispiele für Kommandozeilen:


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

Wartet auf eine Socket-Verbindung auf Port 8000. Hält die VM an, bis die Klasse main geladen wurde (suspend=y ist Defaulteinstellung). Sobald die Verbindung mit der Debugger-Anwendung hergestellt ist, kann sie einen JDWP-Befehl senden, um die VM wieder zu starten.


-agentlib:jdwp=transport=dt_shmem,server=y,suspend=n

Wählt eine verfügbare Transport-Adresse für Shared Memory und gibt diese an stdout aus. Wartet auf eine Shared-Memory-Verbindung unter dieser Adresse. Erlaubt die Ausführung der VM, ehe die Verbindung zur Debugger-Anwendung hergestellt ist.


-agentlib:jdwp=transport=dt_socket,address=myhost:8000

Stellt die Verbindung zu einer laufenden Debugger-Anwendung per Socket auf dem Host myhost an Port 8000 her. Hält diese VM an, bis die Klasse main geladen wurde.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Java-Code mit JPDA debuggen: Protokolle vereinfachen den Prozess

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *