# Remote Debugging Eclipse/Raspberry



## nonickatall (29. Apr 2021)

Hallo ich verzweifele langsam daran, das remote debugging unter Eclipse und einem Raspberry, der unter Debian läuft, zum laufen zu bringen.

Leider finde ich nur Tutorials, wo immer irgend was anders beschrieben oder nur halbherzig beschrieben ist.

Zum Beispiel ist da immer von dem Befehl:


```
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
```

die Rede, aber nicht wo ich diesen Port einstelle. Aber das scheint zu laufen, SSH funktioniert und der Raspberry meldet auf der Konsole:

"Listening for transport dt_socket at address: 8000"

Dann ist da die Rede, dass man warten soll, bis die IDE sich connected. Davon sehe ich sowohl in der Konsole aber auch in Eclipse nichts. 

Java (openjdk-11) läuft natürlich auf beiden Maschinen und auch das Java Programm läuft, sowohl unter Windows in Eclipse, als auf auf der Konsole vom Raspberry, wenn ich es da mit der normalen Java Syntax starte.

In Eclipse unter "Run/Debug Configuration"
ist eine "Remote Java Application" eingerichtet, in "Connection Properties" steht die IP des Raspberry und bei "Port" der Wert 8000.

Wenn ich dort "Debug" klicke, kommt folgende Fehlermeldung:

"'Launching MyHome' has encounterd a problem. Failed to connect to remote VM. Connection refused."

Schalte ich um auf die Debug Sicht, ändert sich nichts.. 

Jemand eine Idee was ich falsch mache?


----------



## nonickatall (29. Apr 2021)

Nachtrag:

Auf einer anderen Seite habe ich den Befehl nun als:


```
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y  suspend=y -jar Dummy.jar
```

gefunden.. Hier wird ja die auszuführende Datei genannt, kommt also nicht automatisch aus Eclipse. Muss ich das, so wie in Java üblich, aus dem entsprechenden Verzeichnis starten? Wäre ja unlogisch, denn die Datei liegt ja nicht auf der Maschine, sondern soll ja gerade "remote debugged" werden...


----------



## nonickatall (29. Apr 2021)

Habe die Datei nun mal aus dem entsprechenden Verzeichnis mit: 


```
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y suspend=y -jar MyHome.jar Main 0
```

gestartet. Auch hier kommt; "Listening for transport dt-socket at address: 8000

Mit 
	
	
	
	





```
java -jar MyHome.jar Main 0
```
 startet das Programm regulär.

Auch hier:  
"'Launching MyHome' has encounterd a problem. Failed to connect to remote VM. Connection refused."


----------



## thecain (29. Apr 2021)

Mit java 11 müsste es mMn `*:8000` sein beim Port


----------



## nonickatall (29. Apr 2021)

Sorry, da hat sich ein Fehler eingeschlichen. Ich habe immer Port 8000 benutzt. Den Code hatte ich aus dem Tutorial kopiert.


----------



## nonickatall (29. Apr 2021)

Ich habe das jetzt mal nicht in einem SSH Fenster auf der Windows Maschine gemacht sondern den Code direkt im Terminal des Raspberry eingegeben. 

Dort kommt dann: "ERROR: JDWP option syntax error: -agentlib:jdwp=transport=dt_socket,adress=8000,server=y"

Gebe ich dann eben: 
	
	
	
	





```
java-agentlib:jdwp=transport=dt_socket,adress=8000,server=y - jar MyHome.jar Main 0
```

Kommt derselbe Fehler also: "ERROR: JDWP option syntax error: -agentlib:jdwp=transport=dt_socket,adress=8000,server=y"


----------



## thecain (29. Apr 2021)

Ich hab den Stern nicht zum Spass geschrieben


----------



## nonickatall (29. Apr 2021)

Verstehe ich nicht.. Also: 

```
java -Xdebug -Xrunjdwp:transport=dt_socket,*:8001,server=y suspend=y -jar MyHome.jar Main 0
```
?

Ich habe auch gesehen das in anderen Tutorials die Parameter server=y und suspend=y mit Komma getrennt sind.. 

Kannst du mir die korrekte Syntax sagen?


----------



## thecain (29. Apr 2021)

`agentlib:jdwp=transport=dt_socket,address=*:8000,server=y,suspend=y`


----------



## nonickatall (29. Apr 2021)

Danke, dann kommt:
"
ERROR: transport error 202: getaddrinfo: unknown host
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [:735]"

Ich glaube für heute gebe ich auf...


----------



## nonickatall (29. Apr 2021)

Ok, da war noch ein Syntax Fehler.. 

Jetzt passiert was anderes... 

Nun kommt:
"Listening for transport dt_socket at address: 8000"

Und wenn ich dann in Eclipse das Programm starte kommt auf der Konsole:

"Fehler: Hauptklasse suspend=y konnte nicht gefunden oder geladen werden
Ursache: java.lang.ClassNotFoundException: suspend=y"

Das klingt schon nach Fortschritt.. 

Aber wo steckt nun der Fehler?


----------



## nonickatall (29. Apr 2021)

Ich habe es gefunden. Das Leerzeichen zwischen "server=y," und "suspend=yes" war zuviel. 

Also die korrekte Syntax ist:
	
	
	
	





```
java agentlib:jdwp=transport=dt_socket,address=*:8000,server=y,suspend=y [voll qualifizierter Klassenname + Parameter]
```

Dann geht es.. Mann ist das syntax sensibel... 

Und das Ganze muss aus der SSL Shell ausgeführt werden.. Warum steht das nirgendwo? Oder suche ich falsch? 

Das war echt nervig.. Zum Beispiel hier:
https://risarora.wordpress.com/2013/06/29/how-to-remote-debug-a-java-application-in-eclipse/

Da steht die syntax ohne das "," und ich suche mir einen Wolf... 

Aber... Danke für die Hilfe. 👍 

Das mit dem "=*:" habe ich nirgendwo gesehen. Da hätte ich noch lange suchen können.

LG
Ralf


----------



## thecain (30. Apr 2021)

Java Application Remote Debugging | Baeldung
					

Explore how to use JDWP together with JDB, both JDK tools.




					www.baeldung.com


----------

