자바 원격 디버깅

Mehvish Ashiq 2024년2월15일
  1. 전제 조건
  2. 자바 애플리케이션 생성
  3. 자바 코드 작성
  4. 자바 원격 디버깅
  5. 자바 애플리케이션 실행
  6. 프로세스에 디버거 연결
  7. 자바 디버그 와이어 프로토콜
자바 원격 디버깅

원격 디버거를 연결할 수 있도록 특정 매개 변수를 사용하여 Java 응용 프로그램을 실행해야 합니다. 작업을 수행할 실행/디버그 구성을 설정하는 방법을 살펴보겠습니다.

전제 조건

이 자습서를 따르려면 다음 항목을 준비하고 실행해야 합니다.

  • Java 18 및 환경 변수가 설정되어 있어야 합니다.
  • IntelliJ IDEA Community Edition IDE(여기에서 다운로드할 수도 있음).
  • 원격 시스템의 IP 주소 및 포트 번호(로컬 시스템에서 작업하는 경우 이 문서를 따를 수도 있음)

나머지 자습서는 이 IDE의 초보자를 고려하여 6개의 섹션으로 나뉩니다. 이미 IntelliJ IDEA를 사용하고 있다면 원하는 섹션으로 이동할 수 있습니다. 그들 모두는 아래에 주어집니다.

  1. 자바 애플리케이션 만들기
  2. Java 코드 쓰기
  3. Java 원격 디버깅
  4. Java 애플리케이션 실행
  5. 프로세스에 디버거 연결
  6. 자바 디버그 유선 프로토콜

자바 애플리케이션 생성

1단계: IntelliJ IDEA IDE를 엽니다.

2단계: 파일 -> 새로 만들기 -> 프로젝트를 클릭합니다. 다음 화면이 나타나면 새 프로젝트를 클릭하고 프로젝트 이름을 적고 저장할 위치를 설정합니다.

Java 언어 및 IntelliJ 빌드 시스템이 선택되었는지 확인합니다. IntelliJ IDEA는 기본 위치에 JDK(Java Development Kit)가 설치되어 있는지 자동으로 감지합니다.

그렇지 않으면 JDK를 찾아 추가하고 브라우저로 이동하지 않고 여기에서 다운로드할 수 있습니다. 마지막으로 만들기 버튼을 클릭합니다.

java 원격 디버깅 - 프로젝트 생성

3단계: src 폴더 -> 새로 만들기 -> Java 클래스를 마우스 오른쪽 버튼으로 클릭하여 Java 클래스를 만듭니다.

자바 원격 디버깅 - 자바 클래스 생성

Java 클래스의 이름을 작성하십시오. 이름만 적으면 기본 패키지에 생성됩니다.

원하는 패키지에 Java 클래스를 생성하려면 다음과 같이 이름을 작성합니다. 패키지와 com.company.remotedebuggingRemoteDebugging.java라는 파일이 각각 생성됩니다.

자바 원격 디버깅 - 이름 자바 클래스

자바 코드 작성

예제 코드:

// You may have a different package name. Write yours here
package com.company.remotedebugging;

// RemoteDebugging class
public class RemoteDebugging {
  // main method
  public static void main(String[] args) {
    String fullName = "Mehvish Ashiq";
    System.out.println("Star Printing");

    // iterate over the string variable
    for (int i = 0; i < fullName.length(); i++) {
      try {
        // sleep for 500 milliseconds
        Thread.sleep(500);
      } // end try
      catch (InterruptedException e) {
        e.printStackTrace();
      } // end catch
      // print character
      System.out.println(fullName.charAt(i));
    } // end for-loop

    System.out.println("Task Completed!");
  } // end main function
} // end RemoteDebugging Class

자바 원격 디버깅

두 가지 실행/디버그 구성만 수행하면 됩니다. 첫 번째는 응용 프로그램을 실행하기 위한 것이고 두 번째는 응용 프로그램에 연결하기 위한 것입니다. 어떻게 할 수 있는지 봅시다.

디버거 설정

1단계: 실행 -> 구성 편집으로 이동합니다.

java 원격 디버깅 - 디버거 설정 화면 1

2단계: 왼쪽 상단 모서리에 있는 + 기호를 클릭하고 Remote JVM Debug를 선택합니다.

java 원격 디버깅 - 디버거 설정 화면 2

3단계: 몇 가지를 구성합니다. 먼저, 이 실행 구성이 호출되는 방식을 알려주는 이름을 작성하십시오.

기본값을 사용할 수도 있지만 구별을 위해 다른 이름을 사용하는 것이 좋습니다. 디버거 모드전송 옵션에 대해 원격 JVM에 연결소켓이 선택되어 있는지 확인하십시오.

다음으로 이 앱이 실행될 컴퓨터의 IP 주소를 작성합니다. 동일한 머신에서 실행할 때 localhost라고 작성합니다.

응용 프로그램이 다른 시스템에서 실행되는 경우 IP 주소를 작성한다는 점을 기억하십시오. 예를 들어 IP는 192.168.15.119와 같이 표시됩니다.

그런 다음 원격 연결을 위해 열어 두려는 포트 번호를 작성하십시오. 이제 메모장에 명령줄 인수를 복사합니다(이 자습서의 뒷부분에서 사용됨).

이러한 VM 옵션은 시작할 호스트 응용 프로그램에 필요합니다. 적용을 클릭한 다음 확인을 클릭합니다.

다음 스크린샷을 참조하세요.

java 원격 디버깅 - 디버거 설정 화면 3

호스트 애플리케이션 설정

실행/디버그 구성을 사용하여 호스트 응용 프로그램을 설정하고 있지만 호스트 응용 프로그램을 실행하는 방법에는 제한이 없습니다.

Java 클래스 본문의 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고(이 예에서 Java 클래스는 RemoteDebugging.java임) 실행 구성 수정을 선택합니다. 다음 화면이 나타납니다.

자바 원격 디버깅 - 호스트 앱 화면 1 설정

옵션 수정을 클릭하고 VM 옵션 추가를 선택하면 다음 화면이 열립니다. 디버거를 설정하는 동안 메모장에 복사한 명령줄 인수를 작성하고 다음 스크린샷과 같이 붙여넣습니다.

마지막으로 적용을 클릭한 다음 확인 버튼을 클릭합니다.

자바 원격 디버깅 - 호스트 앱 화면 2 설정

자바 애플리케이션 실행

실행 -> 실행으로 이동하여 애플리케이션을 실행합니다. Java 클래스가 선택되었는지 확인하십시오.

java 원격 디버깅 - 앱 화면 1 실행

프로그램 출력의 첫 줄은 다음과 같아야 합니다.

주소: 5005에서 전송 dt_socket 수신 대기

디버그 에이전트를 성공적으로 활성화했음을 보여줍니다. 이제 Java 프로그램은 들어오는 디버거 연결을 수락할 준비가 되었습니다.

프로세스에 디버거 연결

중단점을 추가하려는 줄에서 거터를 클릭합니다. 아래 스크린샷에 강조 표시된 다음 줄에 중단점을 추가하고 있습니다.

java 원격 디버깅 - 디버거 화면 1 첨부

이전 섹션에서 했던 것처럼 실행 -> 실행으로 이동하여 애플리케이션을 실행합니다. 프로그램 출력에서 Attach Debugger를 클릭합니다.

다음 스크린샷과 같이 찾을 수 있습니다.

java 원격 디버깅 - 디버거 화면 2 연결

디버거가 성공적으로 연결되었습니다.

java 원격 디버깅 - 디버거 화면 4번 연결

결과적으로 중단점에 도달하는 즉시 프로그램이 일시 중단됩니다. 식 평가와 같은 모든 디버깅 관련 작업을 수행할 수 있습니다.

java 원격 디버깅 - 디버거 화면 3 연결

완료되면 디버그 도구 창에서 세션 탭을 닫거나 왼쪽의 빨간색 사각형을 클릭하여 디버거 세션을 닫아 중지하는 것을 잊지 마십시오.

자바 디버그 와이어 프로토콜

Java Debug Wire Protocol(JDWP라고도 함)은 디버거와 debuggee 간의 통신에 사용되는 프로토콜입니다. 여기서 debuggee는 디버깅 중인 응용 프로그램이고 디버거는 디버깅 중인 응용 프로그램에 연결하는 프로세스입니다.

두 응용 프로그램은 서로 다른 또는 동일한 시스템에서 실행될 수 있습니다. JVM 명령줄 인수에서 JDWP를 사용하여 debuggee 애플리케이션을 시작했습니다.

아래에 간략하게 설명된 다양한 매개변수(옵션)가 필요합니다.

  1. 운송은 완전히 필요한 유일한 옵션입니다. 사용되는 전송 메커니즘을 나타냅니다. 우리는 모든 플랫폼과 호환되는 dt_socket을 사용하고 있으며 다양한 시스템에서 프로세스를 실행할 수 있습니다. 대조적으로 dt_shmem은 두 프로세스가 동일한 시스템에서 실행되고 Windows에서만 작업하려는 경우에 사용됩니다.
  2. 서버 옵션은 필수가 아닙니다. 이 플래그가 켜져 있으면 디버거에 연결하는 방법을 정의합니다. address 옵션에서 주소를 정의하는 프로세스를 공개합니다. 그렇지 않으면 JDWP는 기본 항목을 노출합니다.
  3. suspend 옵션은 JVM(Java Virtual Machine)을 일시 중단하고 디버거가 연결될 때까지 기다려야 하는지 여부를 정의합니다.
  4. address 옵션에는 디버기가 공개한 주소와 포트 번호가 있습니다. 이는 문자열로 변환된 주소를 나타낼 수도 있습니다(예: Windows에서 address를 지정하지 않고 server=y를 사용하는 경우 javadebug).
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook