반응형
자바(Java)는 디버깅 모드를 지원한다. JVM을 시작할 때 확장 옵션으로 -Xdebug 옵션을 주면 된다. 이 옵션과 함께 다른 옵션을 주게 되면 원격지에서 실행되고 있는 프로그램을 중단 시키지 않고 (NonStop) 중간에 끼어들어 디버깅할 수 있다. 서비스 중인 서버에 문제가 생겼을 때 소스 코드만 가지고 있다면 원격지에서 바로 접속해서 디버깅을 할 수 있다. 한 마디로 옴팡 멋진 기술이다. TㅅT
특히 웹 서버에서 동작 중인 서비스이거나, 개발 장비와 실제 테스트하는 장비가 다른 경우 유용하게 사용될 수 있다. 그리고 꼭 기억해 둬야할 점은 디버깅을 하려는 것이니 리모트에서 동작하는 것과 같은 소스 코드가 필요하다. =ㅅ=;;
간단하게 원격 디버깅을 할 때 사용되는 옵션들만 알아보자.
-Xdebug - 디버그 모드로 JVM을 수행한다.
-Xnoagent - 기존의 디버그 모드가 아닌 JPDA를 사용한다.
-Xrunjdwp - JPDA의 옵션을 설정한다.
server=y - JVM과 디버거 중 누가 listen하고 누가 attach하는지 선택한다. "y"이면 JVM이 server socket을 열고 디버거가 주어진 포트로 attach하고, "n"이면 디버거가 먼저 소켓을 열고 listen하고 있으며 JVM이 해당 포트로 접속하게 된다.
transport=dt_socket - TCP/IP로 접속함을 나타낸다.
address=8000 - 8000번 포트(port)로 listen하거나 attach한다.
suspend=n - JVM이 처음 시작할 때 중지 상태(suspend)여부를 설정한다. "y"이면 디버거가 attach하기 전까지 코드를 수행하지 않고 suspend 상태로 대기한다. "n"이면 디버거의 접속 여부와는 상관없이 JVM은 먼저 동작한다.
우선 아래와 같이 옵션을 주고 JVM을 시작시킨다. JVM을 서버(server=y)로 8000번 포트(address=8000)를 listen하게 하자. 그리고 이클립스 원격 디버깅 설정을 시작한다.
이클립스의 메뉴 -> Run -> Debug Configurations...를 선택하여 아래와 같은 Debug Configurations 창을 열자. 왼쪽에 여러 디버깅 모드가 있다. Remote Java Application을 선택하고 새 디버깅 설정을 추가하면 오른쪽 화면과 같이 원격 디버깅 설정 화면이 나타난다.
Connection Type은 JVM의 옵션 중 server=y와 연관이 있는 것이다. JVM을 먼저 수행해 JVM이 해당 포트를 listen하고 이클립스가 attach하는 방식이라면, JVM은 "server=y" 옵션을 주고 이클립스는 "Standard (Socket Attach)"를 선택한다. 반대로 이클립스가 먼저 포트를 열고 listen하고 JVM을 나중에 동작시키는 경우는 이클립스를 "Standard (Socket Listen)"로 선택해서 먼저 수행하고 JVM을 "server=n" 옵션과 함께 나중에 동작시키면 된다.
앞에서 코드를 "server=y" 옵션으로 동작시켰으니 8000번 포트로 디버거가 attach하면 된다. 그리고는 열심히 디버깅하는거닷!!
개발한 코드를 원격지로 원터치 디플로이는 ant를 사용하거나 이클립스의 플러그인, View 등을 통해 가능하다. 웹 서버의 경우는 Java EE Perspective의 Servers View를 통해 서버를 추가하면 손쉽게 가능하다.
아래 그림의 가운데 목록에서 원하는 내가 사용하는 서버를 선택하자. 만일 존재 하지 않는다면 위쪽의 "Download additional server adapters"를 클릭해서 adapter를 추가한다. 그리고 아래쪽의 "Add..."나 "Configure runtime environments..."를 클릭해서 서버가 실제 있는 경로를 설정해 준다.
+ 다른 이클립스의 디버깅 기능은 여기를 보자.
+ 참고
WAS에서 동작하는 프로그램 원격 디버깅하기
Eclipse 플랫폼에서의 디버깅
eclipse: 리모트 디버깅, 디플로잉
UsingEclipseToDebugApplicationsOnNonStop.pdf
특히 웹 서버에서 동작 중인 서비스이거나, 개발 장비와 실제 테스트하는 장비가 다른 경우 유용하게 사용될 수 있다. 그리고 꼭 기억해 둬야할 점은 디버깅을 하려는 것이니 리모트에서 동작하는 것과 같은 소스 코드가 필요하다. =ㅅ=;;
간단하게 원격 디버깅을 할 때 사용되는 옵션들만 알아보자.
-Xdebug -Xnoagent -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n
-Xdebug - 디버그 모드로 JVM을 수행한다.
-Xnoagent - 기존의 디버그 모드가 아닌 JPDA를 사용한다.
-Xrunjdwp - JPDA의 옵션을 설정한다.
server=y - JVM과 디버거 중 누가 listen하고 누가 attach하는지 선택한다. "y"이면 JVM이 server socket을 열고 디버거가 주어진 포트로 attach하고, "n"이면 디버거가 먼저 소켓을 열고 listen하고 있으며 JVM이 해당 포트로 접속하게 된다.
transport=dt_socket - TCP/IP로 접속함을 나타낸다.
address=8000 - 8000번 포트(port)로 listen하거나 attach한다.
suspend=n - JVM이 처음 시작할 때 중지 상태(suspend)여부를 설정한다. "y"이면 디버거가 attach하기 전까지 코드를 수행하지 않고 suspend 상태로 대기한다. "n"이면 디버거의 접속 여부와는 상관없이 JVM은 먼저 동작한다.
우선 아래와 같이 옵션을 주고 JVM을 시작시킨다. JVM을 서버(server=y)로 8000번 포트(address=8000)를 listen하게 하자. 그리고 이클립스 원격 디버깅 설정을 시작한다.
이클립스의 메뉴 -> Run -> Debug Configurations...를 선택하여 아래와 같은 Debug Configurations 창을 열자. 왼쪽에 여러 디버깅 모드가 있다. Remote Java Application을 선택하고 새 디버깅 설정을 추가하면 오른쪽 화면과 같이 원격 디버깅 설정 화면이 나타난다.
Connection Type은 JVM의 옵션 중 server=y와 연관이 있는 것이다. JVM을 먼저 수행해 JVM이 해당 포트를 listen하고 이클립스가 attach하는 방식이라면, JVM은 "server=y" 옵션을 주고 이클립스는 "Standard (Socket Attach)"를 선택한다. 반대로 이클립스가 먼저 포트를 열고 listen하고 JVM을 나중에 동작시키는 경우는 이클립스를 "Standard (Socket Listen)"로 선택해서 먼저 수행하고 JVM을 "server=n" 옵션과 함께 나중에 동작시키면 된다.
앞에서 코드를 "server=y" 옵션으로 동작시켰으니 8000번 포트로 디버거가 attach하면 된다. 그리고는 열심히 디버깅하는거닷!!
개발한 코드를 원격지로 원터치 디플로이는 ant를 사용하거나 이클립스의 플러그인, View 등을 통해 가능하다. 웹 서버의 경우는 Java EE Perspective의 Servers View를 통해 서버를 추가하면 손쉽게 가능하다.
아래 그림의 가운데 목록에서 원하는 내가 사용하는 서버를 선택하자. 만일 존재 하지 않는다면 위쪽의 "Download additional server adapters"를 클릭해서 adapter를 추가한다. 그리고 아래쪽의 "Add..."나 "Configure runtime environments..."를 클릭해서 서버가 실제 있는 경로를 설정해 준다.
+ 다른 이클립스의 디버깅 기능은 여기를 보자.
+ 참고
WAS에서 동작하는 프로그램 원격 디버깅하기
Eclipse 플랫폼에서의 디버깅
eclipse: 리모트 디버깅, 디플로잉
UsingEclipseToDebugApplicationsOnNonStop.pdf