2013-06-05 3 views
4

바람둥이 작동의 내부를 배우고 흐름을 이해하고 싶습니다. 이를 위해 바람둥이 소스로 들어가는 방법?

나는 서블릿 생성 -

public class TestServlet extends HttpServlet { 
    //Breakpoint set on constructor 
    public TestServlet() { 
    } 
} 

나는 소스 조회 디렉토리에 바람둥이 소스 코드를 포함하고 디버그 모드에서 서버를 출시했다. 당신이 바람둥이가 TestServlet의 초기화를 처리 할 수있는 새로운 데몬 스레드를 시작 볼 수 있듯이

Daemon Thread [localhost-startStop-1] (Suspended (entry into method <init> in TestServlet)) 
    owns: StandardWrapper (id=39) 
    owns: StandardContext (id=40) 
    TestServlet.<init>() line: 12 
    NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method] 
    NativeConstructorAccessorImpl.newInstance(Object[]) line: 39  
    DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27  
    Constructor<T>.newInstance(Object...) line: 513 
    Class<T>.newInstance0() line: 355 
    Class<T>.newInstance() line: 308  
    DefaultInstanceManager.newInstance(String) line: 138  
    StandardWrapper.loadServlet() line: 1144  
    StandardWrapper.load() line: 1088 
    StandardContext.loadOnStartup(Container[]) line: 5123 
    StandardContext.startInternal() line: 5407 
    StandardContext(LifecycleBase).start() line: 150  
    ContainerBase$StartChild.call() line: 1559 
    ContainerBase$StartChild.call() line: 1549 
    FutureTask$Sync.innerRun() line: 303  
    FutureTask<V>.run() line: 138 
    ThreadPoolExecutor$Worker.runTask(Runnable) line: 886 
    ThreadPoolExecutor$Worker.run() line: 908 
    Thread.run() line: 662 

- 디버거 내 중단 점에서 멈출 때 다음은 스택 추적입니다. 내가이 위치에서 벗어나면 달려 가서 실행을 멈추고 멈출 것이다. 그러나 주 서버 논리를 이해하고 싶습니다. org.apache.catalina.startup.Bootstrap 클래스로 들어가려면 어떻게해야합니까? (또는 기본 시작 스레드에서 실행되는 다른 클래스)

+0

어떻게 디버그 모드에서 서버를 실행합니까? Eclipse의 "서버"를 사용합니까? 아니면 독립 실행 형 응용 프로그램으로 실행합니까? – jmruc

+0

http://stackoverflow.com/questions/975271/remote-debugging-a-java-application을 참조하십시오. 하지만 문제는 부트 스트랩 (Bootstrap) 클래스에 중단 점을 넣으려고 했습니까? – jmruc

+0

Eclipse에서 Ctrl + Shift + T를 누르고 클래스 이름을 작성한 다음 열어 자신의 코드와 같이 중단 점을 배치하십시오. – jmruc

답변

4

Tomcat을 원격 Java 응용 프로그램으로 디버깅 할 수 있습니다.

  1. 자바 프로젝트를 만들고 프로젝트의 소스 폴더에 톰캣 소스 파일을 복사 : 여기

    는 단계입니다. (컴파일 오류는 무시할 수 있습니다.)
  2. Bootstrap.java를 열고 main 메소드에 중단 점을 설정하십시오.
  3. CATALINA_BASE/bin/setenv.bat (또는 .sh) 파일을 작성하고 다음 행을 파일에 넣으십시오.

    set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y

  4. 시작 톰캣 디버그 모드에서 catalina.bat을 사용하여 (또는 .sh로) 명령 줄에서.

    이클립스에서 catalina.bat jpda start

  5. 는 원격 자바 응용 프로그램에서 디버그 구성을 설정하고 톰캣 프로세스에 연결합니다. (. 실행 -> 디버그 구성 -> 원격 자바 응용 프로그램)

스크린 샷 : Tomcat debugging using JPDA_OPTS

+1

이 방법이 효과적이지만 쉬운 방법이 있습니다. catalina.sh에 수동으로 JPDA_OPTS를 추가하거나 원격 Java 응용 프로그램으로 명시 적으로 연결할 필요가 없습니다. Eclipse는 Eclipse Server View에서 서버를 디버그 모드로 시작할 때이 두 가지를 자동으로 수행합니다. –