Eclipse에서 Remote Debug 설정
환경( 명령어 : catalina.bat version )
Server version Server built Server number OS Name OS Version Architecture JVM Version JVM Vendor | Apache Tomcat/5.5.27 Aug 28 2008 10:08:26 5.5.27.0 Windows XP 5.1 x86 1.6.0_07-b06 Sun Microsystems Inc. | Apache Tomcat/6.0.18 Jul 22 2008 02:00:36 6.0.18.0 Linux 2.6.27.5-41.fc9.i686 i386 1.6.0_10-b33 Sun Microsystems Inc. |
먼저 Eclipse 자체 내에서 서버를 구동 시키면서 Remote Debug까지 동시에 걸고자 했으나 잘 안되기에 톰캣을 먼저 구동 시켜준 후 이클립스에서 디버그를 실행하였다.
( 되는 방법이 있는 데 찾질 못하는 건지 잘 모르겠다. 우선 넘어가자;;; )
리눅스 환경과 윈도우 환경에서 테스트를 진행해 보았다.
Catalina.bat 파일만 다르지 나머지는 동일하므로 그대로 따라 하면 된다.
( 리눅스와 윈도우… 괜히 나눈듯한… )
우선 Remote Debug를 걸기 전에 톰캣의 설정을 살펴봐야 한다.
Tomcat/bin/Catalina.bat or Catalina.sh 파일을 열어보자.
JPDA 옵션으로 나와 있는 값을 이용했는데 JPDA에 대한 자세한 설명은 아래를 참조하자.
http://xrath.com/javase/ko/6/docs/ko/technotes/guides/jpda/architecture.html
Catalina.bat File
아래와 같이 시작하는 라인을 찾아서 굵은 표시줄을 수정한다.
if not ""%1"" == ""jpda"" goto noJpda set JPDA=jpda if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport set JPDA_TRANSPORT=dt_shmem -> set JPDA_TRANSPORT=dt_socket :gotJpdaTransport if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress set JPDA_ADDRESS=jdbconn -> set JPDA_ADDRESS=8000 :gotJpdaAddress if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend set JPDA_SUSPEND=n :gotJpdaSuspend if not "%JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS=-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND% :gotJpdaOpts shift :noJpda |
Catalina.sh File
요 파일은 건드릴게 없었다.
if [ "$1" = "jpda" ] ; then if [ -z "$JPDA_TRANSPORT" ]; then JPDA_TRANSPORT="dt_socket" fi if [ -z "$JPDA_ADDRESS" ]; then JPDA_ADDRESS="8000" fi if [ -z"$JPDA_SUSPEND" ]; then JPDA_SUSPEND="n" fi if [ -z "$JPDA_OPTS" ]; then JPDA_OPTS="-Xdebug -Xrunjdwp:transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND" fi CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS" shift fi |
Catalina.bat에서는 Transport와 Address의 값이 다르게 잡혀 있어서 위와 같이 바꾸어 주면 되고 Catalina.sh파일에서는 지정하고자 하는 값으로 설정이 되어 있기에 여기선 그대로 사용을 해도 된다.
JPDA_TRANSPORT=dt_socket
JPDA_ADDRESS=8000
JPDA_SUSPEND=n
위와 같은 값을 설정 해주면 된다. Address 부분은 8000번 포트가 사용 중이라면 다른 사용하지 않는 포트 번호를 적어주면 된다.
## netstat 명령어를 통해서 사용 중인 포트인지 확인 후 값을 설정한다.
윈도우는 Cmd 창을 띄우고 리눅스에선 터미널을 하나씩 띄운다.
각각 아래 명령어로 톰캣을 구동한다.
Windows Linux | Catalina.bat jpda start Catalina.sh jpda start |
아래와 같은 로그가 가장 먼저 찍히면서 구동이 될 것이다.
Listening for transport dt_socket at address: 8000
이제 이클립스에서 디버그로 실행을 해본다.
디버그 하고자 하는 소스 오른쪽 클릭 후 Debug As – Debug Configuration – Remote Java Application 더블 클릭
위와 같이 설정을 해준다.
Host는 디버그 걸고자 하는 서버의 IP를 적어주고 Port는 Catalina.bat파일에 설정한 포트 번호를 적어준다.
Localhost가 아닌 다른 서버의 IP를 디버그 하고자 할 때는 해당 포트를 열어 주고서 진행 해야 한다.
이제 적용을 하고 Debug를 하면 아래와 같이 나오면 성공이다.
해당 서버로 호출을 해보면 아래와 같이 디버그가 걸린다.
System.out.print를 마구 찍어대는 노가다를 줄일 수 있게 되었다. ㅎㅎ;
톰캣과 이클립스를 따로 돌려야 하며 서버에 올린 클래스 파일과 이클립스에서 디버그 걸고자 하는 파일이 서로 같아야 한다. 다를 경우 디버그가 산(?)으로 간다.. -0-;