Cloud Debugger 사용

Cloud Debugger는 App Engine, Compute Engine, GKE, Cloud Run과 같은 다양한 플랫폼에서 클라우드에서 실행 중인 라이브 애플리케이션을 중지하거나 속도를 저하시키지 않고 이러한 애플리케이션의 호출 스택 및 로컬 변수를 캡처하고 검사할 수 있습니다.

또한 IDE의 표준 디버거와 매우 유사하게 작동하며 동일한 사용자 인터페이스를 제공하지만 두 가지 큰 차이점이 있습니다.

  • Debugger는 실행 중인 애플리케이션의 실행을 일시 중지하지 않습니다.
  • Debugger에서는 애플리케이션을 단계별로 실행할 수 없습니다.

Debugger가 지원하는 플랫폼에 대한 자세한 내용은 이 가이드를 참조하세요.

요구사항

Debugger를 실행하려면 다음이 필요합니다.

Debugger 사용

Debugger를 사용하려면 다음 안내를 따르세요.

  1. IntelliJ 내에서 프로젝트를 엽니다.
  2. Run(실행) > Edit Configurations(구성 편집)를 선택합니다.
  3. 왼쪽 상단에 있는 더하기 기호(+)를 클릭하여 드롭다운 목록에서 Cloud Debugger를 선택합니다.
  4. Name(이름) 필드에 구성의 이름을 입력합니다.
  5. Project(프로젝트) 필드에서 프로젝트가 선택되었는지 확인합니다.
  6. OK(확인)를 클릭합니다.
  7. 도구 모음에서 녹색 버그 '디버그' 아이콘을 클릭하여 디버거를 시작합니다.
  8. Attach to an Application(애플리케이션에 연결) 대화상자에서 디버깅할 백엔드 모듈을 선택하고 Attach(연결)를 클릭합니다.

스냅샷 위치 설정

스냅샷은 소스 코드의 지정한 위치에서 로컬 변수와 호출 스택을 캡처합니다. 스냅샷 위치는 애플리케이션에서 실행 중인 모든 인스턴스에 적용됩니다.

스냅샷 위치를 설정하려면 다음 안내를 따르세요.

  1. Debugger를 실행 중인 애플리케이션에 연결한 후 보려는 소스 코드가 포함된 파일로 이동합니다.
  2. 일반 IDEA 디버거를 사용하여 로컬 애플리케이션의 줄 중단점을 설정할 때와 마찬가지로 왼쪽 여백 영역에서 스냅샷을 생성할 실행 가능한 줄을 클릭합니다.

    여백에 파란색 원이 나타나 스냅샷 위치를 표시하고, Debugger 스냅샷 창에는 대기 중인 스냅샷이 표시됩니다.

  3. 스냅샷 위치를 제거할 파란색 원을 클릭합니다.

다음 예시에서는 스냅샷 위치가 if (userAgent != null) { 줄에 설정되어 있습니다.

스냅샷 위치 설정

스냅샷 생성

설정한 스냅샷 위치에서 어떤 인스턴스든 처음으로 코드를 실행하면 디버거가 스냅샷을 생성하여 사용자가 볼 수 있게 제공합니다. 그러면 사용자가 스냅샷을 검사하고 해당 데이터를 사용하여 애플리케이션을 디버깅할 수 있습니다.

Debugger Snapshots(Debugger 스냅샷) 창에서 스냅샷의 라벨이 Pending(대기 중)에서 Debugger가 스냅샷을 캡처한 시간으로 변경됩니다.

스택 추적 보기

고급 개념

스냅샷 조건 설정

스냅샷 조건은 이 값이 true일 때만 스냅샷을 생성하도록 디버거에 지시하는 부울 식입니다. 예를 들면 x !=0입니다. 조건은 논리 및 숫자 연산자(예: score < 0 || score > 500)를 포함할 수 있는 완전한 부울 표현식입니다.

조사식

때로는 문제를 해결하는 데 필요한 정보가 애플리케이션의 로컬 변수 및 필드에 바로 표시되지 않을 수도 있습니다. 특히 App Engine에서 실행할 때 보안 관리자는 java.util.Hashmap와 같은 시스템 클래스의 비공개 멤버에 너무 깊이 들어가지 못하게 합니다. 이러한 경우 조사식이 추가 정보를 노출하는 효과적인 임시 로컬 변수 역할을 합니다. 조사식은 스냅샷을 만들 때 복잡한 표현식을 평가하고 객체 계층 구조를 순회할 수 있습니다.

스냅샷 위치를 설정한 후에 조사식을 지정할 수 있습니다. 조사식은 위에서 설명한 스냅샷 조건과 동일한 언어 기능을 지원합니다.

지원 받기

의견을 보내려면 GitHub에서 문제를 신고하거나 Stack Overflow에서 질문하세요.