Java-Anwendung remote debuggen (mit Eclipse)

Volvagia

Top Contributor
Java-Anwendung remote debuggen (mit Eclipse)

Manchmal funktioniert ein Programm auf einem Rechner und auf einem anderen wiederrum nicht. So wie bei mir neulich: XP macht bspw. keinen Unterschied bei der Groß-/Kleinschreibung von Dateinamen, Ubuntu schon.
Durch einen Denkfehler lief lokal auf XP alles einwandfrei, auf dem Server wurde eine Exception beim Dateizugriff geworfen. Natürlich kann man dabei möglichst viel in die Standardausgabe schreiben und so den Fehler lokalisieren, aber in so gut wie jedem Fall ist es einfacher und sinnvoller einen Debugger zu verwenden.

Um die VM ordnungsgemäß im Debug-Modus zu starten, benötigen wir 4 Parameter:

Parameter | Bedeutung/Funktion/Zweck
-Xdebug | Startet in Debugging-Modus
-Xnoagent | Deaktiviert den Support fürm Old Jave Debugger (oldjdb)
-Djava.compiler=NONE | "-D" setzt verschiedene Parameter. java.compiler=NONE bedeutet, dass der JIT-Compiler deaktiviert wird.
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6754 | "-Xrunjdwp" setzt die eigendlichen Debugging-Parameter. transport liegt die Verbindungsart fest. server sagt, dass er als Server auf Verbindungen warten soll. suspend sagt, dass er mit der Ausführung warten soll, bis ein Debugger verbindet. (In diesen Fall soll er NICHT warten.) address legt den Port fest, auf dem auf eine Verbindung gewartet werden soll.

Wenn unsere jar also rdbdemo.jar heißt, sieht der Befehl in der Kommandozeile so aus:

Code:
java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6754 -jar rdbdemo.jar


Um das Debugging zu testen, können wir uns ein kurzes Demoprogramm schreiben:

Java:
package rdbdemo;

import java.util.concurrent.TimeUnit;

public final class RDBDemo extends Thread
{
	public RDBDemo()
	{
		super("Remote debugging demo thread");
	}

	public void run()
	{
		boolean die = false;
		int i = 0;
		do
		{
			i++;
			
			try
			{
				TimeUnit.MILLISECONDS.sleep(200L);
			}
			catch (InterruptedException e) {}
		}
		while(!die);
	}

	public static void main(String[] args)
	{
		new RDBDemo().start();
	}
}


Nun müssen wir als Erstes die Debug-Konfiguration in Eclipse öffnen:
attachment.php


Hier Doppelklick auf "Remote Java Application":
attachment.php


Daraufhin legt Eclipse automatisch eine Konfiguration für das momentan ausgewählte Projekt an. Hier müssen nur noch wenige Einstellungen getroffen werden. Wir müssen lediglich den Hostname/IP des Hosts, auf dem die Anwendung im Debug-Modus läuft und den Port anpassen.
attachment.php


Nun können wir unsere eingerichtete Konfiguration starten:
attachment.php



Damit lässt sich die Anwendung remote genauso wie lokal debuggen. Inkl. Threads pausieren, Breakpoints, Variablenzugriff, zeilenweises abarbeiten und was es sonst noch so alles gibt.
attachment.php



Weiterführende Links:

 

Anhänge

  • debug1.png
    debug1.png
    8,4 KB · Aufrufe: 234
  • debug2.png
    debug2.png
    4,4 KB · Aufrufe: 249
  • debug3.png
    debug3.png
    3,4 KB · Aufrufe: 250
  • debug4.png
    debug4.png
    7,5 KB · Aufrufe: 244
  • debug5.png
    debug5.png
    44,9 KB · Aufrufe: 238

Oben