백그라운드 작업 디버그

중요 API

Windows 이벤트 로그에서 백그라운드 작업 활성화 및 디버그 추적을 비롯한 백그라운드 작업을 디버그하는 방법을 알아봅니다.

Out-of-process 및 In-process 백그라운드 작업 디버깅하기

이 토픽에서는 호스트 앱과는 별개인 프로세스로 실행되는 백그라운드 작업을 주로 다룹니다. In-process 백그라운드 작업을 디버깅하려는 경우, 별도의 백그라운드 작업 프로젝트가 없다면 OnBackgroundActivated()(In-process 백그라운드 코드가 실행되는 위치)에 중단점을 설정할 수 있습니다. 실행할 백그라운드 코드를 트리거하는 방법에 대한 지침은 아래 백그라운드 작업 코드 디버깅을 위해 수동으로 백그라운드 작업 트리거하기의 2단계를 참조하세요.

백그라운드 작업 프로젝트가 올바르게 설정되었는지 확인하기

이 토픽에서는 디버깅할 백그라운드 작업이 있는 기존 앱이 이미 있다고 가정합니다. 다음 내용은 Out-of-process로 실행되는 백그라운드 작업에만 해당하며, In-process 백그라운드 작업에는 적용되지 않습니다.

  • C# 및 C++에서 기본 프로젝트가 백그라운드 작업 프로젝트를 참조하는지 확인하세요. 이 참조가 제자리에 없는 경우에는 백그라운드 작업이 앱 패키지에 포함되지 않습니다.
  • C# 및 C++에서 백그라운드 작업 프로젝트의 출력 형식이 "Windows 런타임 구성 요소"인지 확인하세요.
  • 백그라운드 클래스를 패키지 매니페스트의 진입점 특성에서 선언해야 합니다.

백그라운드 작업 코드 디버깅을 위해 수동으로 백그라운드 작업 트리거하기

백그라운드 작업은 Microsoft Visual Studio를 통해 수동으로 트리거할 수 있습니다. 그런 다음 코드를 단계별로 실행하고 디버깅할 수 있습니다.

  1. C#에서는 백그라운드 클래스의 Run(실행) 메서드에 중단점을 배치하고/배치하거나(In-process 백그라운드 작업의 경우 App.OnBackgroundActivated()에 중단점을 배치함), System.Diagnostics를 사용해서 디버깅 출력을 기록하세요.

    C++에서는 백그라운드 클래스의 Run(실행) 함수에 중단점을 배치하고/배치하거나(In-process 백그라운드 작업의 경우 App.OnBackgroundActivated()에 중단점을 배치함), OutputDebugString을 사용해서 디버깅 출력을 기록하세요.

  2. 디버거에서 애플리케이션을 실행한 다음 수명 주기 이벤트 도구 모음을 사용해서 백그라운드 작업을 트리거하세요. 이 드롭다운에는 Visual Studio에서 활성화할 수 있는 백그라운드 작업의 이름이 나와 있습니다.

    참고 항목

    수명 주기 이벤트 도구 모음 옵션은 기본적으로 Visual Studio에 표시되지 않습니다. 이러한 옵션을 표시하려면 Visual Studio의 현재 도구 모음을 마우스 오른쪽 단추로 클릭하고 디버그 위치 옵션을 사용하도록 설정했는지 확인합니다.

    이렇게 하려면 백그라운드 작업이 이미 등록되어 있어야 하고 여전히 트리거를 기다리고 있어야 합니다. 그 예로 백그라운드 작업이 일회성 TimeTrigger에 등록되어 있고 해당 트리거가 이미 발생한 경우에는, Visual Studio를 통해 작업을 시작해도 아무 효과가 없습니다.

    참고 항목

    Application 트리거, MediaProcessing 트리거, ControlChannelTrigger, PushNotificationTrigger 등의 트리거를 사용하는 백그라운드 작업과 SystemTriggerSmsReceived 트리거 유형과 함께 사용하는 백그라운드 작업은 이런 방식으로 활성화할 수 없습니다.
    애플리케이션 트리거MediaProcessingTrigger를 사용하면 trigger.RequestAsync()가 포함된 코드를 통해 수동으로 신호를 보낼 수 있습니다.

    debugging background tasks

  3. 백그라운드 작업이 활성화되면 디버거가 해당 작업에 연결되고 VS에 디버그 출력이 표시됩니다.

백그라운드 작업 활성화 디버깅하기

참고 항목

이 섹션은 Out-of-process로 실행되는 백그라운드 작업에만 해당하며, In-process 백그라운드 작업에는 적용되지 않습니다.

백그라운드 작업 활성화는 다음 세 가지 사항에 따라 달라집니다.

  • 백그라운드 작업 클래스의 이름 및 네임스페이스
  • 패키지 매니페스트에 지정된 진입점 특성
  • 백그라운드 작업 등록 시 앱에서 지정된 진입점
  1. Visual Studio를 사용하여 백그라운드 작업의 진입점을 확인하세요.

    • C# 및 C++에서 백그라운드 작업 프로젝트에 지정된 백그라운드 작업 클래스의 이름과 네임스페이스를 적어 두세요.
  2. 매니페스트 디자이너를 사용하여 백그라운드 작업이 패키지 매니페스트에서 올바르게 선언되었는지 확인하세요.

    • C# 및 C++에서는 진입점 특성이 클래스 이름 앞에 붙는 백그라운드 작업 네임스페이스와 일치해야 합니다. 예: RuntimeComponent1.MyBackgroundTask.
    • 작업과 함께 사용할 트리거 형식도 전부 지정해야 합니다.
    • ControlChannelTrigger 또는 PushNotificationTrigger를 사용하는 경우가 아니라면 절대 실행 파일을 지정해서는 안 됩니다.
  3. Windows만 해당합니다. Windows에서 백그라운드 작업을 활성화하는 데 사용되는 진입점을 보려면 디버그 추적을 사용하도록 설정하고, Windows 이벤트 로그를 사용하세요.

    이 절차를 따른 후에 백그라운드 작업의 잘못된 진입점 또는 트리거가 이벤트 로그에 표시되면 앱이 백그라운드 작업을 올바르게 등록하지 않습니다. 이 작업에 대한 도움말은 백그라운드 작업 등록을 참조하세요.

    1. 시작 화면으로 이동해서 이벤트 뷰어를 열고 eventvwr.exe를 검색하세요.
    2. 이벤트 뷰어에서 애플리케이션 및 서비스 로그 ->Microsoft ->Windows ->BackgroundTaskInfrastructure로 이동합니다.
    3. 작업 창에서 보기 ->분석 및 디버그 로그 표시를 선택하여 진단 로깅을 사용하도록 설정합니다.
    4. 진단 로그를 선택하고 로그 사용 설정을 클릭하세요.
    5. 이제 앱을 사용해서 백그라운드 작업을 다시 등록하고 활성화해 보세요.
    6. 자세한 오류 정보는 진단 로그를 참조하세요. 이 로그에는 백그라운드 작업에 대해 등록된 진입점이 포함됩니다.

event viewer for background tasks debug information

백그라운드 작업 및 Visual Studio 패키지 배포

백그라운드 작업을 사용하는 앱을 Visual Studio를 사용하여 배포하고 매니페스트 디자이너에서 지정한 버전(주 및/또는 부)을 업데이트하는 경우 이후에 Visual Studio를 사용하여 앱을 다시 배포하면 앱의 백그라운드 작업이 정지할 수 있습니다. 이 현상은 다음과 같은 방법으로 해결할 수 있습니다.

  • 패키지와 함께 생성된 스크립트를 실행해서 업데이트된 앱(Visual Studio를 대신함)을 배포하려면 Windows PowerShell을 사용하세요.
  • 이미 Visual Studio를 사용하여 앱을 배포했고 앱의 백그라운드 작업이 지금 정지된 경우 다시 부팅하거나 로그오프한 다음 로그인하여 앱의 백그라운드 작업이 다시 작동하게 합니다.
  • C# 프로젝트에서 이런 현상이 발생하지 않게 하려면 "항상 내 패키지 다시 설치" 디버깅 옵션을 선택하면 됩니다.
  • 앱이 최종 배포되어 패키지 버전을 증가시킬 수 있을 때까지 기다립니다(디버그하는 중에 변경하지 않음).

설명

  • 백그라운드 작업을 다시 등록하기 전에 앱으로 기존 백그라운드 작업의 등록 여부를 검사해야 합니다. 같은 백그라운드 작업을 여러 번 등록하면 백그라운드 작업이 트리거될 때마다 두 번 이상 실행되어 예기치 않은 결과가 발생할 수 있습니다.
  • 백그라운드 작업에서 잠금 화면에 액세스해야 하는 경우, 백그라운드 작업의 디버깅을 시도하기 전에 앱을 잠금 화면에 배치해야 합니다. 잠금 화면 지원 앱의 매니페스트 옵션을 지정하는 방법에 대한 자세한 내용은 애플리케이션 매니페스트에서 백그라운드 작업 선언하기를 참조하세요.
  • 백그라운드 작업 등록 매개변수는 등록 시 유효성 검사를 거칩니다. 등록 매개변수 중 하나라도 유효하지 않으면 오류가 반환됩니다. 백그라운드 작업 등록이 실패하는 시나리오를 앱이 정상적으로 처리해야 합니다. 그 대신 앱이 작업 등록을 시도한 후 유효한 등록 개체를 갖는 데 의존할 경우에는 충돌이 발생할 수 있습니다.

Visual Studio를 사용하여 백그라운드 작업을 디버그하는 방법에 대해서는 UWP 앱에서 일시 중단, 다시 시작 및 백그라운드 이벤트를 트리거하는 방법을 참조하세요.