Visual Studio를 사용하여 Service Fabric 애플리케이션 디버그

로컬 Service Fabric 애플리케이션 디버깅

Important

VS 2022에서는 원격 디버깅이 지원되지 않습니다.

로컬 컴퓨터 개발 클러스터에서 Azure Service Fabric 애플리케이션을 배포하고 디버그하여 시간과 비용을 절약할 수 있습니다. Visual Studio 2019 또는 2015는 로컬 클러스터에 애플리케이션을 배포하고 애플리케이션의 모든 인스턴스에 디버거를 자동으로 연결할 수 있습니다. 디버거를 연결하려면 Visual Studio를 관리자 권한으로 실행해야 합니다.

  1. 서비스 패브릭 개발 환경 설정의 단계를 따라 로컬 개발 클러스터를 시작합니다.

  2. F5 키를 누르거나 디버그>디버깅 시작을 클릭합니다.

    Screenshot that shows the Debug menu.

  3. 코드의 중단점을 설정하고 디버그 메뉴의 명령을 클릭하여 애플리케이션의 단계를 진행합니다.

    참고 항목

    Visual Studio는 애플리케이션의 모든 인스턴스에 연결합니다. 단계별로 코드를 실행하는 동안 중단점은 동시 세션에서 발생하는 여러 프로세스에 히트될 수 있습니다. 스레드 ID의 각 중단점을 조건부로 생성하거나 진단 이벤트를 사용하여 히트된 후에 중단점을 사용하지 않도록 설정합니다.

  4. 진단 이벤트 창이 자동으로 열려서 실시간으로 진단 이벤트를 볼 수 있습니다.

    View diagnostic events in real time

  5. 클라우드 탐색기의 진단 이벤트 창도 열 수 있습니다. Service Fabric에서 아무 노드를 마우스 오른쪽 단추로 클릭하고 스트리밍 추적 보기를 선택합니다.

    Open the diagnostic events window

    특정 서비스 또는 애플리케이션에 대한 추적을 필터링하려는 경우, 해당 서비스 또는 애플리케이션에서 스트리밍 추적을 사용하면 됩니다.

  6. 진단 이벤트는 자동으로 생성되는 ServiceEventSource.cs 파일에서 볼 수 있으며 애플리케이션 코드에서 호출됩니다.

    ServiceEventSource.Current.ServiceMessage(this, "My ServiceMessage with a parameter {0}", result.Value.ToString());
    
  7. 진단 이벤트 창은 필터링, 일시 중지 및 실시간 이벤트 검사를 지원합니다. 필터는 해당 콘텐츠를 포함하는 이벤트 메시지의 단순 문자열 검색입니다.

    Filter, pause and resume, or inspect events in real time

  8. 서비스 디버깅은 다른 모든 애플리케이션의 디버깅과 같습니다. 손쉬운 디버깅을 위해 일반적으로 Visual Studio를 통해 중단점을 설정합니다. 신뢰할 수 있는 컬렉션은 여러 노드에 걸쳐 복제하더라도 여전히 IEnumerable을 구현합니다. 이 구현은 디버그하는 동안 Visual Studio의 결과 뷰를 사용하여 내부에 저장한 내용을 확인할 수 있음을 의미합니다. 이렇게 하려면 코드의 어디든 중단점을 설정합니다.

    Start debugging an application

디버깅의 일부로 스크립트 실행

특정 시나리오에서는 디버깅 세션을 시작하는 과정에서 스크립트를 실행해야 할 수도 있습니다(예: 기본 서비스를 사용하지 않는 경우).

Visual Studio에서 Start-Service.ps1 파일을 Service Fabric 애플리케이션 프로젝트(.sfproj)의 Scripts 폴더에 추가할 수 있습니다. 이 스크립트는 로컬 클러스터에서 애플리케이션을 만든 후에 호출됩니다.

원격 Service Fabric 애플리케이션 디버깅

Azure의 Service Fabric 클러스터에서 Service Fabric 애플리케이션이 실행 중인 경우, Visual Studio에서 직접 원격으로 이를 디버깅할 수 있습니다.

참고 항목

이 기능은 Service Fabric SDK 2.0Azure SDK for .NET 2.9가 필요합니다.

Warning

원격 디버깅은 실행 중인 애플리케이션에 영향을 미치기 때문에 개발/테스트 시나리오를 위한 것이며 프로덕션 환경에서는 사용되지 않습니다.

  1. 클라우드 탐색기에 있는 클러스터로 이동합니다. 마우스 오른쪽 단추를 클릭하고 디버깅 사용을 선택합니다

    Enable remote debugging

    이 동작은 필수 네트워크 구성과 함께 클러스터 노드에서 원격 디버깅 확장을 사용하는 프로세스를 시작합니다.

  2. Cloud Explorer에 있는 클러스터 노드를 마우스 오른쪽 단추로 클릭하고 디버거 연결을 선택합니다.

    Attach debugger

  3. 프로세스에 연결 대화 상자에서 디버깅하려는 프로세스를 선택하고 연결을 클릭하세요.

    Choose process

    연결하려는 프로세스의 이름은 서비스 프로젝트 어셈블리 이름과 일치합니다.

    디버거는 프로세스를 실행하는 모든 노드에 연결됩니다.

    • 상태 비저장 서비스를 디버깅하는 경우, 모든 노드에서 서비스의 모든 인스턴스는 디버그 세션의 일부입니다.

    • 상태 저장 서비스를 디버깅하는 경우, 파티션의 주 복제본에만 활성화되고 디버거에 의해 검색됩니다. 디버그 세션 중에 주 복제본이 이동한 경우, 해당 복제본의 처리는 여전히 디버그 세션의 일부입니다.

    • 주어진 서비스의 관련 파티션 또는 인스턴스만 캐치하려면 조건부 중단점을 사용하여 특정 파티션 또는 인스턴스만 중단할 수 있습니다.

      Conditional breakpoint

      참고 항목

      현재 동일한 서비스 실행 파일 이름의 인스턴스가 다수인 패브릭 클러스터 디버깅을 지원하지 않습니다.

  4. 애플리케이션 디버깅을 완료하면 클라우드 탐색기에 있는 클러스터를 마우스 오른쪽 단추로 클릭하여 디버깅 사용 안 함을 선택하여 원격 디버깅 확장을 사용하지 않을 수 있습니다.

    Disable remote debugging

원격 클러스터 노드에서 스트리밍 추적

또한 원격 클러스터 노드에서 Visual Studio까지 추적을 직접 스트리밍할 수 있습니다. 이 기능을 통해 Service Fabric 클러스터 노드에서 생성된 ETW 추적 이벤트를 스트리밍할 수 있습니다.

참고 항목

이 기능은 Service Fabric SDK 2.0Azure SDK for .NET 2.9가 필요합니다. 이 기능은 Azure에서 실행되는 클러스터만 지원합니다.

Warning

스트리밍 추적은 실행 중인 애플리케이션에 영향을 미치기 때문에 개발/테스트 시나리오를 위한 것이며 프로덕션 환경에서는 사용되지 않습니다. 프로덕션 시나리오에서는 Azure Diagnostics를 통해 이벤트 전달을 사용해야 합니다.

  1. 클라우드 탐색기에 있는 클러스터로 이동합니다. 마우스 오른쪽 단추를 클릭하고 스트리밍 추적 사용을 선택합니다

    Enable remote streaming traces

    이 동작은 필수 네트워크 구성 뿐만 아니라 클러스터 노드에서 스트리밍 추적 확장을 사용하는 프로세스를 시작합니다.

  2. Cloud Explorer에 있는 노드 요소를 확장하고, 추적을 스트리밍하려는 노드를 마우스 오른쪽 단추로 클릭하고 스트리밍 추적 보기를 선택합니다.

    View remote streaming traces

    추적을 보려는 노드 개수만큼 2단계를 반복합니다. 각 노드 스트림은 전용 창에 표시됩니다.

    이제 서비스 패브릭에서 내보낸 추적과 서비스를 볼 수 있습니다. 특정 애플리케이션에만 표시하도록 이벤트를 필터링하려는 경우, 필터에서 애플리케이션의 이름만 간단히 입력하면 됩니다.

    Viewing streaming traces

  3. 클러스터에서 스트리밍 추적을 완료하면 Cloud Explorer에 있는 클러스터를 마우스 오른쪽 단추로 클릭하고 스트리밍 추적 사용 안 함을 선택하여 원격 스트리밍 추적을 사용하지 않을 수 있습니다.

    Disable remote streaming traces

다음 단계