<< User Agent 정리 | Home | 11월 15일 방영되었던 현장르포 동행의 '굿바이, 찜질방' 를 보고 >>

Java 프로그램에서의 Debugging 방법

1. Breakpoints
 - Breakpoints설정을 통해 로컬/리모트 방식으로 Eclipse에서 스텝 단계적으로 디버깅을 함
 - 리모트의 경우 WAS엔진에 따라 플러그인 설치하거나 서버 설정으로 가능
   : Tomcat의 경우 Tomcat구동시에 set JAVA_OPTS=-Xdebug                                  
 - Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n 설정한다음 구동하고 이클립스에서 Run>Debug>Remote Java Application 으로 이동한 다음 New 버튼을 클릭하여 새로운 Remote Java Application을 추가하고 Debug 버튼을 클릭하여 Remote Tomcat 서버를 디버깅 가능한 상태로 유지한 다음 어플리케이션을 Breakpoints지정하고 실행하면 됨
   : Jeus의 경우는 jeus 구동시에 -classic -Xdebug -Xnoagent    
 - Xrunjdwp:transport=dt_socket,address=8888,suspend=n,server=y 옵션을 추가하여 구동한 다음 이클립스에서 Run>debug>Remote Java Application에서 신규 등록시 포트 맞게 설정하고 debug누르면 서버와 연동된 상태에서 해당 어플리케이션을 Breakpoints지정한 다음 실행하면 됨
 - 장점 : 설치와 사용이 간단하고 method attributes, local variables의 저장된 값들을 확인 가능
 - 단점 : Breakpoint까지의 단계 단계 진행기간이 길고 리모트 디버그 진행 시 서버와 연동할 경우 PC의 CPU와 메모리 사용량이 높음

2. Debug messages
 -  JDK logging, Apache Commons Logging, Log4j를 활용하여 소스내에 로그 코드를 삽입하여 원하는 값이나 로그를 확인하면서 디버깅을 함
 - 장점 : 입맛에 맞게 적재 적소에 디버깅이 가능, 빠른 디비깅 가능, Exception Trace 가능
 - 단점 : 일일이 소스 코드 수정을 해줘야 디버깅이 가능, 코드가 지저분해지고 런타임 성능이 안좋음

3. Dynamic Proxy
 - J2SE 1.3부터 제공하는 Dynamic Proxy기능을 활용하여 Interface를 통해 함수 호출을 가로채는 기능을 통해 디버깅을 함(AOP의 전단계임)
 - Dynamic Proxy 참조 사이트
   : http://java.sun.com/j2se/1.3/docs/guide/reflection/proxy.html
 - 장점 : 소스 코드의 삽입 없이 디버깅이 가능, 성능에 영향없음
 - 단점 : public이 아닌 함수에서는 사용이 불가능, 필요할 경우 코드 수정을 해야함

4. Run-time Profiler
 - 프로그램의 성능을 향상(Tuning)시키기 위해서 JVM 데이터를 후킹해서 프로그램의 메모리, 응답 속도등의 정보를 제공하는 기능
 - Profiler
   : TPTP
   : Optimizeit Profiler
   : Eclipse Profiler
   : JProfiler
   : sqlprofiler
   : Memory Profiler for C
  - 장점 : 코드의 수정, 추가가 없음,  소스코드 없이도 Trace가능
  - 단점 : 툴을 사용할려면 비용이 있음, 설치하는데 복잡하고 시간이 소요, 함수에 아규먼트 지원이 안됨

5. AOP
 - 공통적인 기능(로깅, 보안, 트랜젝션)을 한 곳에서 정의 할수 있으며, 새로운 기능을 적용하려고 하는 클래스를 수정할 필요 없이 그런 기능을 어디에 어떻게 적용할 것인지를 선언적으로 정의 하는것을 말함
 - 이클립스 기잔의 AOP 툴
   : Aspect Java Development Tools (AJDT)
 - 장점 : 설치 쉽고 필요한 기능을 선택적으로 디버깅 가능, 함수에 아규먼트 지원, 원 소스는 수정이 없음, 실서비스에 성능 영향 적음
 - 단점 : AOP이해하는 데 시간과 지식이 필요, 패키디 Trace에 문제 있음

6. 기타
  - 웹 개발시 필요한 디버깅 툴
   : HTTP Debugging Proxy - Fiddler
   : Firebug
   : HttpWatch
   : Yslow
 - Web Validators
   : HTML/XHTML Validator
   : CSS Validator
   : RSS/ATOM Feed Validator

5가지의 방법을 적절하게 필요할 때 사용하면 소스의 품질을 향상시킬 수 있고 개발 생산성도 올라갈 수 있으리라고 봅니다. 개발 따로 디버깅을 따로 진행한다면 불필요한 개발 누수가 발생할 가능성이 많아서 개발자들이 놓지게 됩니다.
개발시에도 테스트와 디버깅 기능이 녹아 들수 있게 개발하는 습관도 중요합니다.
테스트와 디버깅을 귀찮은 것으로 치부하지 않게 하기 위해서는.....

Tags : ,


Re: Java 프로그램에서의 Debugging 방법

덕분에 리모트 디버깅 깔끔하게 해결했습니다.
감사합니다.

Add a comment Send a TrackBack