개념

이 페이지에서는 Stackdriver Debugger API의 클라이언트 역할, 데이터 모델, 지원되는 작업에 대해 설명합니다.

클라이언트 역할

API는 2가지의 클라이언트 역할(에이전트디버거)을 정의합니다.

에이전트

에이전트는 디버깅 대상 애플리케이션이 실행되고 있는 동일한 시스템에서 실행되는 프로그램입니다. 에이전트는 중단점 위치에서 코드가 실행될 때 상태 데이터(예: 프로그램 변숫값, 호출 스택 등)를 Stackdriver Debugger로 전송하는 역할을 합니다.

디버깅 대상당 2개 이상의 에이전트를 포함할 수 있습니다. 예를 들어 여러 개의 실행 가능한 작업으로 구성된 애플리케이션이 있다고 가정해 보겠습니다. 각 작업에는 자체 에이전트가 있지만 모두 하나의 디버깅 대상에 속합니다. 그러나 특정 애플리케이션의 여러 버전을 실행하는 경우, 각 버전은 별도로 디버깅할 수 있는 서로 다른 디버깅 대상이 됩니다.

에이전트의 예로는 Google에서 제공하는 디버거 에이전트가 있으며, 이 에이전트는 Google Compute Engine에서 실행되는 자바 또는 Go로 작성된 애플리케이션에 사용할 수 있습니다.

디버거 클라이언트

디버거 클라이언트는 사용자가 중단점을 설정 및 삭제하고 중단점(스냅샷이라고도 함)에서 캡처한 상태 데이터를 볼 수 있는 애플리케이션입니다. 디버거 클라이언트의 예로는 Google Cloud Platform Console에서 실행되는 Stackdriver Debugger 도구가 있습니다. 다른 예로는 디버거 기능을 추가할 수 있는 IDE가 있습니다.

데이터 모델

API 데이터 모델은 디버깅 대상중단점 항목과 중단점 위치에서 코드가 실행될 때 에이전트가 수집할 수 있는 상태 데이터 유형을 제공합니다.

디버깅 대상

디버깅 대상은 사용자가 디버깅할 애플리케이션입니다. 위에서 설명한 대로 애플리케이션을 구성하는 모든 작업은 동일한 디버깅 대상으로 간주되고 같은 디버깅 대상 ID를 공유합니다. 특정 샘플 애플리케이션의 서로 다른 버전은 각각 별도의 디버깅 대상으로 간주됩니다. 디버깅 대상은 API에서 Debuggee 항목(REST 또는 RPC)으로 표시됩니다.

중단점

중단점은 애플리케이션에 대한 상태 데이터를 수집할 위치 및 시점에 대한 정보를 에이전트에 제공합니다. 또한 수집된 상태 데이터 자체도 저장합니다.

중단점은 다음 사항을 지정합니다.

  • 디버깅 대상의 소스 코드 위치
  • 에이전트가 상태 데이터를 수집할 시점을 결정하는 데 사용할 조건 표현식
  • 수집된 데이터를 평가할 표현식

디버깅 대상에서 수집된 상태 데이터에는 다음 내용이 포함될 수 있습니다.

  • 프로그램 변수의 값
  • 호출 스택
  • 평가된 표현식의 값

중단점은 Breakpoint 항목(RPC 또는 REST)으로 표시됩니다.

소스 위치

소스 위치는 대상 애플리케이션의 지점을 파일 경로 및 줄 번호로 정의합니다. 소스 위치는 SourceLocation 항목(RPC 또는 REST)으로 표시됩니다.

변수

변수에는 에이전트가 상태 데이터를 수집한 시점의 프로그램 객체(이름이 지정되었거나 지정되지 않음) 콘텐츠가 포함됩니다. 예를 들어 정수 유형의 로컬 변숫값이나 그 자체로 변수인 멤버를 개수에 제한 없이 포함할 수 있습니다. 변수는 Variable 항목(RPC 또는 REST)으로 표시됩니다.

상태 메시지

상태 메시지는 중단점이나 변수의 상태에 대한 정보를 제공합니다. 예를 들어 잘못된 소스 위치에 설정된 중단점은 오류를 나타내는 상태 메시지를 포함할 수 있습니다. 상태 메시지는 StatusMessage 항목(RPC 또는 REST)으로 표시됩니다.

형식 메시지

형식 메시지는 상태 메시지의 텍스트 콘텐츠입니다. 형식 메시지는 FormatMessage 항목(RPC 또는 REST)으로 표시됩니다.

작업

컨트롤러 인터페이스와 디버거 인터페이스는 각각 에이전트 클라이언트와 디버거 클라이언트의 작업 집합을 제공합니다.

에이전트 작업

에이전트는 컨트롤러 인터페이스를 사용하여 다음 작업을 수행할 수 있습니다.

작업 설명 REST RPC
등록 디버깅 대상을 컨트롤러 서비스에 등록합니다. register RegisterDebuggee
활성 중단점 목록 표시 지정된 디버깅 대상의 활성 중단점 목록을 모두 반환합니다. list ListActiveBreakpoints
활성 중단점 업데이트 중단점에서 애플리케이션의 상태 데이터(예: 프로그램 변수, 호출 스택 등)를 업데이트합니다. update UpdateActiveBreakpoint

에이전트의 일반적인 작업 순서는 다음과 같습니다

  1. 애플리케이션이 시작되면 에이전트는 register 또는 RegisterDebugger 메소드를 사용하여 애플리케이션을 디버깅 대상으로 등록합니다.

  2. 에이전트는 간격을 두고 list 또는 ListActiveBreakpoints를 호출하여 현재 설정된 중단점을 검색합니다.

  3. 애플리케이션이 중단점이 설정된 코드 위치에 도달하면 에이전트는 프로그램 변숫값이나 호출 스택과 같은 상태 데이터를 수집한 후 update 또는 UpdateActiveBreakpoint를 사용하여 컨트롤러 서비스로 전송합니다.

디버거 클라이언트 작업

디버거 클라이언트는 디버거 인터페이스를 사용하여 다음 작업을 수행할 수 있습니다.

작업 설명 REST RPC
디버깅 대상 목록 표시 클라이언트의 사용자가 중단점을 설정할 수 있는 디버깅 대상 목록을 표시합니다. list ListDebuggees
중단점 설정 중단점 위치를 설정합니다. set SetBreakpoint
중단점 목록 표시 현재 사용자가 액세스할 수 있는 중단점 목록을 반환합니다. list ListBreakpoints
중단점 가져오기 디버깅 대상 및 중단점 ID로 중단점 세부정보를 가져옵니다. get GetBreakpoint
중단점 삭제 지정된 중단점을 삭제합니다. delete DeleteBreakpoint

디버거 클라이언트의 일반적인 작업 순서는 다음과 같습니다.

  1. 사용자가 클라이언트 애플리케이션 UI에서 디버거 뷰를 열어 디버거 워크플로를 시작하면 클라이언트는 list 또는 ListDebugees 메소드를 호출하여 디버깅 대상인 애플리케이션 버전 목록을 가져오고 사용자는 이 중에서 원하는 버전을 선택할 수 있습니다.

  2. 사용자가 UI에서 중단점을 만들면 클라이언트 애플리케이션은 set 또는 SetBreakpoint 작업을 호출하여 중단점을 설정합니다.

  3. 클라이언트 애플리케이션은 간격을 두고 get 또는 GetBreakpoint를 호출하여 디버깅 대상이 중단점 위치에서 코드를 실행했고 에이전트가 이 중단점에 대한 상태 정보를 업데이트했는지 확인합니다. 2가지 작업이 성공적으로 수행된 경우, 클라이언트 애플리케이션이 사용자에게 상태 데이터를 표시합니다.

  4. 사용자가 UI에서 중단점을 삭제하면 클라이언트는 delete 또는 DeleteBreakpoint를 호출합니다.