program story

Java 원격 디버깅, 기술적으로 어떻게 작동합니까?

inputbox 2020. 12. 9. 08:09
반응형

Java 원격 디버깅, 기술적으로 어떻게 작동합니까?


JVM의 원격 디버깅 기능이 정말 마음에 듭니다. 그러나 내부적으로 어떻게 작동하는지 궁금합니다.

내 가정 : 실행중인 프로세스가 연결된 원격 디버거 (예 : IDE)에서 소스 코드를 다운로드 / 사용하는 JVM 기능을 통해 수행됩니다. 현재 스택 추적의 행을 알고 각 IDE로 이동할 수 있습니다. 중단 점. 스택 추적 통신 및 애플리케이션 상태 검사는 소켓 또는 공유 메모리 (원격 디버거 설정)를 통해 수행됩니다.

거기에 흥미로운 링크 / 리소스가 있습니까?


JVM의 디버깅 기능은 JPDA (Java Platform Debugger Architecture) 를 통해 제공됩니다 .

JPDA 자체는 다음으로 구성됩니다.

  • JVM TI (Java Virtual Machine Tool Interface)-사용할 도구를위한 기본 프로그래밍 인터페이스입니다. 이 인터페이스는 상태 검사를 허용하고 디버그 대상 내에서 실행 흐름을 제어하는 ​​데 도움이됩니다.
  • JDWP (Java Debug Wire Protocol)-디버거와 디 버기 프로세스 간의 통신을 정의하는 데 사용됩니다.
  • JDI (Java Debug Interface)-이 인터페이스를 통해 도구 개발자는 원격 디버거 애플리케이션을 작성할 수 있습니다.

JPDA 아키텍처 구조에 나열된 다이어그램 은 좋은 시작점입니다. 찾아 볼 추가 장소 는 JPDA 페이지에 나열된 가이드 입니다.


Eclipse 디버깅은 에이전트라고하는 것으로 시작됩니다.

컴파일 된 ".class"소스를 실행하는 JVM에는 런타임 중에 외부 라이브러리 (Java 또는 C ++로 작성된)를 JVM에 삽입 할 수있는 기능이 있습니다. 이러한 외부 라이브러리를 에이전트라고하며 실행 된 .class 파일의 내용을 수정할 수 있습니다. 이러한 에이전트는 JVM 내부에서 실행되는 일반 Java 코드 내에서 액세스 할 수없는 JVM 기능에 액세스 할 수 있으며 실행중인 소스 코드 삽입 및 수정, 프로파일 링 등과 같은 흥미로운 작업을 수행하는 데 사용할 수 있습니다. JRebel과 같은 일부 도구 (사용 코드의 핫 교체)는이 기능을 사용하여 마법을 달성합니다.

에이전트 Lib를 JVM에 전달하려면 시작 인수를 통해 수행합니다.

agentlib:libname[=options]

실제로 jdwp라는 에이전트 라이브러리를 Tomcat을 실행하는 JVM에 전달했습니다. jdwp는 디버거와 실행중인 JVM 간의 통신을 정의하는 데 사용되는 JDWP (Java Debug Wire Protocol)의 JVM 특정 선택적 구현입니다. 구현 된 경우 jdwp.so 또는 jdwp.dll로 JVM의 기본 라이브러리로 제공됩니다.

그래서 그것은 무엇을합니까? 간단히 말해서 우리가 전달하는 jdwp 에이전트는 기본적으로 애플리케이션을 실행하는 JVM 인스턴스와 디버거 (원격 또는 로컬에 위치 할 수 있음) 사이의 링크 기능을 제공합니다. 에이전트 라이브러리이기 때문에 실행중인 코드를 가로 채고, JVM과 디버거 사이에 브리지를 생성하고, JVM에 디버거 기능을 적용하는 기능이 있습니다. JVM 아키텍처에서 디버깅 기능은 JVM 자체에서 찾을 수 없지만 외부 도구 (디버거라고도 함)로 추상화되므로 이러한 도구는 디버깅중인 JVM을 실행하는 로컬 시스템에 상주하거나 실행될 수 있습니다. 외부 기계에서. 원격 시스템에서 JVM을 실행하고 JDWP를 사용하는 것은 분리 된 모듈 식 아키텍처입니다.

이것이 Eclipse 디버거가 간단히 작동하는 방식입니다.


Java의 디버깅 아키텍처를 JPDA라고합니다. JPDA 문서 를 읽고 싶을 것입니다 . 특히, Walk-through 섹션 은 스택에서 값을 얻기 위해 JDI와 인터페이스하는 IDE의 예를 제공합니다.

참고 URL : https://stackoverflow.com/questions/3591497/java-remote-debugging-how-does-it-work-technically

반응형