자바 원격 디버깅
원격 디버거를 연결할 수 있도록 특정 매개 변수를 사용하여 Java 응용 프로그램을 실행해야 합니다. 작업을 수행할 실행/디버그 구성을 설정하는 방법을 살펴보겠습니다.
전제 조건
이 자습서를 따르려면 다음 항목을 준비하고 실행해야 합니다.
- Java 18 및 환경 변수가 설정되어 있어야 합니다.
- IntelliJ IDEA Community Edition IDE(여기에서 다운로드할 수도 있음).
- 원격 시스템의 IP 주소 및 포트 번호(로컬 시스템에서 작업하는 경우 이 문서를 따를 수도 있음)
나머지 자습서는 이 IDE의 초보자를 고려하여 6개의 섹션으로 나뉩니다. 이미 IntelliJ IDEA를 사용하고 있다면 원하는 섹션으로 이동할 수 있습니다. 그들 모두는 아래에 주어집니다.
자바 애플리케이션 생성
1단계: IntelliJ IDEA IDE를 엽니다.
2단계: 파일 -> 새로 만들기 -> 프로젝트를 클릭합니다. 다음 화면이 나타나면 새 프로젝트
를 클릭하고 프로젝트 이름을 적고 저장할 위치를 설정합니다.
Java
언어 및 IntelliJ
빌드 시스템이 선택되었는지 확인합니다. IntelliJ IDEA는 기본 위치에 JDK(Java Development Kit)가 설치되어 있는지 자동으로 감지합니다.
그렇지 않으면 JDK를 찾아 추가하고 브라우저로 이동하지 않고 여기에서 다운로드할 수 있습니다. 마지막으로 만들기
버튼을 클릭합니다.
3단계: src
폴더 -> 새로 만들기 -> Java 클래스를 마우스 오른쪽 버튼으로 클릭하여 Java 클래스를 만듭니다.
Java 클래스의 이름을 작성하십시오. 이름만 적으면 기본 패키지
에 생성됩니다.
원하는 패키지에 Java 클래스를 생성하려면 다음과 같이 이름을 작성합니다. 패키지와 com.company.remotedebugging
및 RemoteDebugging.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단계: 실행 -> 구성 편집으로 이동합니다.
2단계: 왼쪽 상단 모서리에 있는 +
기호를 클릭하고 Remote JVM Debug
를 선택합니다.
3단계: 몇 가지를 구성합니다. 먼저, 이 실행
구성이 호출되는 방식을 알려주는 이름을 작성하십시오.
기본값을 사용할 수도 있지만 구별을 위해 다른 이름을 사용하는 것이 좋습니다. 디버거 모드
및 전송
옵션에 대해 원격 JVM에 연결
및 소켓
이 선택되어 있는지 확인하십시오.
다음으로 이 앱이 실행될 컴퓨터의 IP 주소를 작성합니다. 동일한 머신에서 실행할 때 localhost
라고 작성합니다.
응용 프로그램이 다른 시스템에서 실행되는 경우 IP 주소를 작성한다는 점을 기억하십시오. 예를 들어 IP는 192.168.15.119
와 같이 표시됩니다.
그런 다음 원격 연결을 위해 열어 두려는 포트 번호를 작성하십시오. 이제 메모장에 명령줄 인수를 복사합니다(이 자습서의 뒷부분에서 사용됨).
이러한 VM 옵션은 시작할 호스트 응용 프로그램에 필요합니다. 적용
을 클릭한 다음 확인
을 클릭합니다.
다음 스크린샷을 참조하세요.
호스트 애플리케이션 설정
실행/디버그 구성을 사용하여 호스트 응용 프로그램을 설정하고 있지만 호스트 응용 프로그램을 실행하는 방법에는 제한이 없습니다.
Java 클래스 본문의 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고(이 예에서 Java 클래스는 RemoteDebugging.java
임) 실행 구성 수정
을 선택합니다. 다음 화면이 나타납니다.
옵션 수정
을 클릭하고 VM 옵션 추가
를 선택하면 다음 화면이 열립니다. 디버거를 설정하는 동안 메모장에 복사한 명령줄 인수를 작성하고 다음 스크린샷과 같이 붙여넣습니다.
마지막으로 적용
을 클릭한 다음 확인
버튼을 클릭합니다.
자바 애플리케이션 실행
실행 -> 실행으로 이동하여 애플리케이션을 실행합니다. Java 클래스가 선택되었는지 확인하십시오.
프로그램 출력의 첫 줄은 다음과 같아야 합니다.
주소: 5005에서 전송 dt_socket 수신 대기
디버그 에이전트를 성공적으로 활성화했음을 보여줍니다. 이제 Java 프로그램은 들어오는 디버거 연결을 수락할 준비가 되었습니다.
프로세스에 디버거 연결
중단점을 추가하려는 줄에서 거터를 클릭합니다. 아래 스크린샷에 강조 표시된 다음 줄에 중단점을 추가하고 있습니다.
이전 섹션에서 했던 것처럼 실행 -> 실행으로 이동하여 애플리케이션을 실행합니다. 프로그램 출력에서 Attach Debugger
를 클릭합니다.
다음 스크린샷과 같이 찾을 수 있습니다.
디버거가 성공적으로 연결되었습니다.
결과적으로 중단점에 도달하는 즉시 프로그램이 일시 중단됩니다. 식 평가와 같은 모든 디버깅 관련 작업을 수행할 수 있습니다.
완료되면 디버그
도구 창에서 세션 탭을 닫거나 왼쪽의 빨간색 사각형
을 클릭하여 디버거 세션을 닫아 중지하는 것을 잊지 마십시오.
자바 디버그 와이어 프로토콜
Java Debug Wire Protocol(JDWP
라고도 함)은 디버거와 debuggee
간의 통신에 사용되는 프로토콜입니다. 여기서 debuggee
는 디버깅 중인 응용 프로그램이고 디버거는 디버깅 중인 응용 프로그램에 연결하는 프로세스입니다.
두 응용 프로그램은 서로 다른 또는 동일한 시스템에서 실행될 수 있습니다. JVM 명령줄 인수에서 JDWP
를 사용하여 debuggee
애플리케이션을 시작했습니다.
아래에 간략하게 설명된 다양한 매개변수(옵션)가 필요합니다.
운송
은 완전히 필요한 유일한 옵션입니다. 사용되는 전송 메커니즘을 나타냅니다. 우리는 모든 플랫폼과 호환되는dt_socket
을 사용하고 있으며 다양한 시스템에서 프로세스를 실행할 수 있습니다. 대조적으로dt_shmem
은 두 프로세스가 동일한 시스템에서 실행되고 Windows에서만 작업하려는 경우에 사용됩니다.서버
옵션은 필수가 아닙니다. 이 플래그가 켜져 있으면 디버거에 연결하는 방법을 정의합니다.address
옵션에서 주소를 정의하는 프로세스를 공개합니다. 그렇지 않으면JDWP
는 기본 항목을 노출합니다.suspend
옵션은 JVM(Java Virtual Machine)을 일시 중단하고 디버거가 연결될 때까지 기다려야 하는지 여부를 정의합니다.address
옵션에는 디버기가 공개한 주소와 포트 번호가 있습니다. 이는 문자열로 변환된 주소를 나타낼 수도 있습니다(예: Windows에서address
를 지정하지 않고server=y
를 사용하는 경우javadebug
).