eclipse
Eclipse 원격 디버깅이 백그라운드에서 어떻게 작동하는지
수색…
Eclipse 원격 디버깅은 scence 뒤에서 어떻게 작동합니까?
Eclipse 디버깅은 에이전트라고하는 것으로 시작됩니다.
컴파일 된 .class
소스를 실행하는 JVM 에는 Java 또는 C ++로 작성된 외부 라이브러리가 런타임에만 JVM에 삽입 될 수있는 기능이 있습니다. 이러한 외부 라이브러리는 에이전트라고하며 실행 된 .class
파일의 내용을 수정할 수 있습니다. 이러한 에이전트는 JVM 내부에서 실행되는 일반 Java 코드에서 액세스 할 수없는 JVM 기능에 액세스 할 수 있으며 실행중인 소스 코드 주입, 수정 , 프로파일 링 등과 같은 흥미로운 작업을 수행하는 데 사용될 수 있습니다. JRebel 과 같은 도구는 이 기능은 마법을 성취하기위한 것입니다.
Agent Lib을 JVM에 전달하려면 시작 인수를 사용하여
agentlib:libname[=options] format.
실제로 jdwp
라는 Agent Lib을 Tomcat을 실행하는 JVM에 전달하고있었습니다. jdwp
는 디버거와 실행중인 JVM 간의 통신을 정의하는 데 사용되는 JDWP (Java Debug Wire Protocol) 의 JVM 관련 선택적 구현입니다. 구현이 JVM의 네이티브 라이브러리로서 jdwp.so
또는 jdwp.dll
로서 제공되고있는 경우
그럼 어떻게합니까?
간단히 말하면, 우리가 전달하는 jdwp 에이전트는 기본적으로 애플리케이션을 실행하는 JVM 인스턴스와 디버거 (원격 또는 로컬 중 하나에 위치 할 수 있음) 사이의 링크 역할을합니다. 에이전트 라이브러리이기 때문에 실행중인 코드를 가로 채고 JVM과 디버거 간 브리지를 만들고 JVM에 디버거 기능을 적용 할 수 있습니다. JVM 아키텍처에서 디버깅 기능은 JVM 자체에서 찾을 수 없지만 외부 도구 (디버거라고도 함)로 추상화되어 있기 때문에 이러한 도구는 디버깅되거나 실행중인 JVM을 실행하는 로컬 시스템에있을 수 있습니다 외부 기계에서. JVM이 원격 시스템에서 실행되고 JDWP를 사용하고 원격 디버거가 원격 시스템과 통신 할 수있게하는 것은 분리 된 모듈러 아키텍처입니다.
즉, Eclipse 디버거가 작동하는 방식입니다.