Remote Debugging mit Eclipse

Aus SDQ-Wiki

Tutorial: Remote Debugging mit Eclipse

Einführung

Nicht jedes Java Programm kann auch direkt aus Eclipse und damit per Mausklick im Debug Modus gestartet werden. Dennoch ist es möglich, den Eclipse-Debugger zu nutzen, um Java-Programme zu untersuchen. Hierzu kann die JVM, die das Programm ausführt, so konfiguriert werden, daß Eclipse mit einer Remote Debugging Session mit der Virtual Machine verbunden werden kann.

Java Startparameter

Damit die Möglichkeit besteht, die JVM remote zu debuggen, muß diese per Startparameter dazu gebracht werden, einen Remote Debugging Port zu öffnen.

Wird das Java-Programm über die Kommandozeile gestartet, dann können dem 'java'-Aufruf direkt folgende Parameter übergeben werden:

java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 ....
suspend=y/n
bestimmt ob die JVM mit der Ausführung wartet, bis sich ein Debugger mit ihr verbunden hat oder nicht
address=5005
legt den Port fest, über den sich der Debugger mit der JVM verbinden kann.

Wird das Programm nicht über die Konsole, sondern über ein ANT-Skript gestartet, so werden die Parameter dem Java Target in dem entsprechenden Build-Skript übergeben.

<java 	classname="org.cocome.tradingsystem.inventory.application.ApplicationFactory" fork="true">
	<jvmarg value="-Xdebug"/>
	<jvmarg value="-Xnoagent"/>
	<jvmarg value="-Djava.compiler=NONE"/>
	<jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"/>
	...
</java>

Die Parameter haben die gleiche Bedeutung wie bei dem direkten Aufruf über die Kommandozeile.

Eclipse Remote Debugging Session

Um eine Remote Debugging Session in Eclipse zu starten sollte ein Projekt im Workspace selektiert werden. Wenn möglich jenes, das auch den Code des zu untersuchenden Programms enthält. Danach wählt man im Menü den Punkt Run -> Debug. Ein neues Fenster wird geöffnet, in welchem man eine neue Remote-Debugging-Konfiguration anlegen kann. Das folgende Bildschirm-Photo zeigt eine Beispielkonfiguration, die den gleichen Port wie zuvor bei den Startparametern verwendet.

Remote debugging config.jpg

Unter dem Reiter Source können die Quellen des zu debuggenden Programms definiert werden.

Um eine bestimmte Code Stelle zu untersuchen, empfiehlt es sich, dort einen Breakpoint anzulegen. Dies geschieht, indem man den Code im Eclipse Java Editor öffnet und über einen Mausklick in den linken Randbereich einen Breakpoint anlegt.

Breakpoint.jpg

Wird diese Stelle bei der Verarbeitung erreicht, so fragt Eclipse, ob man zu der Debug-Perspektive wechseln möchte (sofern man sich nicht bereits in dieser befindet, oder den Wechsel bereits vorher dauerhaft abgelehnt oder bestätigt hat). In dieser Perspektive ermöglicht der Debug View eine Sicht auf alle laufenden Threads der JVM, und die Verarbeitung kann mittels der Icons am oberen Rand Schritt für Schritt fortgesetzt werden.

Debug view.jpg

Darüber hinaus können die einzelnen Variabeln, die in dem aktuellen Code-Ausschnitt sichtbar sind, in der Variables View samt ihrem Inhalt betrachtet werden.

Variables view.jpg

Weitergehende Informationen

Für die Bildschirm-Photos wurde Eclipse in der Version 3.2.2 Build M20070212-1330 verwendet.

Soll mehr als eine JVM debugged werden, so ist zu beachten, daß unterschiedliche Ports sowohl in den Java-Aufrufen, als auch in den einzelnen Debuggern definiert werden müssen.

Weitergehende Informationen sind auch auf der Eclipse Website zu finden.