Debugging Alfresco Tomcat with Eclipse
I am having trouble debugging Alfresco (a web app running on Tomcat) with Eclipse. For some reason I can’t access it in debugging mode. I am sure this is not anything specific to Alfresco; probably it is to do with either not having Tomcat set up correctly for debug mode or something environmental on my PC preventing Eclipse from connecting to Tomcat in debug mode.
I posted about this on the Alfresco forums (Debugging Alfresco Tomcat with Eclipse), but haven’t received any response as yet. So here is a detailed description of my problem.
I have the JPDA_TRANSPORT
environment variable is set to dt_socket
.
The JPDA_ADDRESS
environment variable is set to 8000
.
In Tomcat’s startup script (C:\Alfresco\tomcat\bin\startup.bat
), I changed the line that invokes Catalina to include jpda
:
call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%
When I start Tomcat and see the below messages in the console.
Listening for transport dt_socket at address: 8000 28/05/2010 1:44:42 PM org.apache.coyote.http11.Http11Protocol init INFO: Initializing Coyote HTTP/1.1 on http-8080
I set up Eclipse debug config as per the screen shot below.
And when I attempt to start that debug configuration, I get the below error from Eclipse.
Error detail is below.
eclipse.buildId=2.3.1.201003091003-RELEASE java.version=1.6.0_20 java.vendor=Sun Microsystems Inc. BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_AU Framework arguments: -product com.springsource.sts.ide Command-line arguments: -os win32 -ws win32 -arch x86 -product com.springsource.sts.ide -clean -data D:\work\projects\JadeLynx\Alfresco-3.3 Error Fri May 28 14:55:37 EST 2010 Failed to connect to remote VM. Connection refused. java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.<init>(Socket.java:375) at java.net.Socket.<init>(Socket.java:189) at org.eclipse.jdi.internal.connect.SocketTransportService$2.run(SocketTransportService.java:136) at java.lang.Thread.run(Thread.java:619)
I made sure Windows firewall was turned off.
I made sure Eclipse has no proxy information.
I did a netstat -an | grep -i listen
to confirm port is being listened at. I guess it is:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING
I tried the advice in this thread: Debugging Alfresco Tomcat with Eclipse .
Open Catalina.bat [C:\Alfresco\tomcat\bin], find “DEBUG_OPTS=” and add following line.. set DEBUG_OPTS= -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
I tried the advice in this thread too : Remote Debugging with Eclipse.
You may also add following line to your alfresco.sh and start the server export JAVA_OPTS='-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y'
All to no avail. So, how do I prove the server is really listening? Any other ideas would be more than welcome!
Further information: when the server has started, I see this on the console (before I even try to connect to the debugger):
CODE: SELECT ALL 31/05/2010 1:45:41 PM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 31/05/2010 1:45:41 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 159453 ms Debugger failed to attach: timeout during handshake
Solved!
Talk about egg on my face! The debugging was working perfectly all along.. each time I tried, Eclipse "did nothing", which I thought was weird - so I tried again and got the error message. What I didn't realise is that Eclipse had started debugging the first time: I just didn't realise it because I am used to Eclipse saying "Shall I enter debug mode?"
What a relief. *whew* :)