Отладка фоновой задачи

Основные API

Узнайте, как отлаживать фоновую задачу, включая активацию фоновых задач и трассировку отладки в журнале событий Windows.

Отладка внепроцессных и внутрипроцессных фоновых задач

В этом разделе в основном рассматриваются фоновые задачи, выполняемые в отдельном процессе, чем ведущее приложение. Если вы отлаживаете фоновую задачу в процессе, то у вас не будет отдельного проекта для фоновой задачи, и вы можете установить точку останова на OnBackgroundActivated() (где выполняется ваш фоновый код в процессе). Посмотрите шаг 2 в разделе Запуск фоновых задач вручную для отладки фонового кода задачиниже, чтобы получить инструкции о том, как активировать выполнение вашего фонового кода.

Убедитесь, что фоновый проект задачи настроен правильно

В этом разделе предполагается, что у вас уже есть существующее приложение с фоновой задачей для отладки. Ниже приведены фоновые задачи, которые выполняются вне процесса и не применяются к фоновым задачам внутри процесса.

  • В C# и C++убедитесь, что основной проект ссылается на фоновый проект задачи. Если эта ссылка не используется, фоновая задача не будет включена в пакет приложения.
  • В C# и C++убедитесь, что тип выходных данных фонового проекта задачи — "Компонент среды выполнения Windows".
  • Фоновый класс должен быть объявлен в атрибуте точки входа в манифесте пакета.

Активация фоновых задач вручную для отладки фонового кода задачи

Фоновые задачи можно активировать вручную с помощью Microsoft Visual Studio. Затем можно пошагово просмотреть код и выполнить отладку.

  1. В C#, поместите точку останова в метод Run фонового класса (для фоновых задач внутри процесса поместите точку останова в App.OnBackgroundActivated()) и/или выводите отладочную информацию с помощью System.Diagnostics.

    В C++поместите точку останова в функцию Запуска фонового класса (для фоновых задач внутри процесса поместите точку останова в App.OnBackgroundActivated()) и (или) запись выходных данных отладки с помощью OutputDebugString.

  2. Запустите приложение в отладчике, а затем активируйте фоновую задачу с помощью панели инструментов событий жизненного цикла. В этом раскрывающемся списке показаны имена фоновых задач, которые могут быть активированы Visual Studio.

    Замечание

    Параметры панели инструментов "События жизненного цикла" не отображаются по умолчанию в Visual Studio. Чтобы отобразить эти параметры, щелкните правой кнопкой мыши на текущей панели инструментов в Visual Studio и убедитесь, что включен параметр Панель отладки.

    Для этого фоновая задача должна быть уже зарегистрирована, и она должна по-прежнему ожидать триггера. Например, если фоновая задача была зарегистрирована с помощью одноразового TimeTrigger и триггер уже сработал, запуск задачи через Visual Studio не повлияет на выполнение задачи.

    Замечание

    Фоновые задачи, использующие следующие триггеры, нельзя активировать таким образом: триггер приложения, триггер обработки мультимедиа, триггер контрольного канала, триггер push-уведомленийи фоновые задачи с использованием системного триггера с типом триггера SmsReceived.
    триггер приложения и триггер обработки медиа можно активировать вручную в коде с помощью trigger.RequestAsync().

    отладка фоновых задач

  3. Когда активируется фоновая задача, отладчик будет присоединяться к нему и отображать выходные данные отладки в VS.

Отладка активации фоновой задачи

Замечание

Этот раздел относится к фоновым задачам, выполняемым вне процесса и не применяется к фоновым задачам внутри процесса.

Активация фоновой задачи зависит от трех вещей:

  • Имя и пространство имен фонового класса задач
  • Атрибут точки входа, указанный в манифесте пакета
  • Точка входа, указанная приложением при регистрации фоновой задачи
  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. Просмотрите журналы диагностики для получения подробных сведений об ошибках. Это будет включать точку входа, зарегистрированную для фоновой задачи.

средство просмотра событий для сведений об отладке фоновых задач

Фоновые задачи и развертывание пакета Visual Studio

Если приложение, использующее фоновые задачи, развёртывается с помощью Visual Studio, и версия (основная и/или дополнительная) указана в конструкторе манифестов, затем обновляется, то последующее повторное развёртывание приложения с помощью Visual Studio может вызвать зависание фоновых задач приложения. Это можно исправить следующим образом:

  • Используйте Windows PowerShell для развертывания обновленного приложения (вместо Visual Studio), выполнив скрипт, созданный вместе с пакетом.
  • Если вы уже развернули приложение с помощью Visual Studio и его фоновые задачи теперь остановлены, перезагрузите устройство или выйдите и снова войдите в систему, чтобы фоновые задачи приложения заработали снова.
  • Вы можете выбрать параметр отладки "Всегда повторно установить мой пакет", чтобы избежать этого в проектах C#.
  • Дождитесь, пока приложение не будет готово к окончательному развертыванию, чтобы увеличить версию пакета (не изменяйте ее во время отладки).

Замечания

  • Прежде чем снова зарегистрировать фоновую задачу, убедитесь, что приложение проверяет наличие существующих регистраций фоновых задач. Несколько регистраций одной и той же фоновой задачи могут привести к непредвиденным результатам, поскольку фоновая задача может запускаться более одного раза при срабатывании.
  • Если для фоновой задачи требуется доступ к экрану блокировки, перед отладкой фоновой задачи необходимо поместить приложение на экран блокировки. Сведения об указании параметров манифеста для приложений с поддержкой экрана блокировки см. в разделе Объявление фоновых задач в манифесте приложения.
  • Параметры регистрации фоновых задач проверяются во время регистрации. Ошибка возвращается, если какие-либо из параметров регистрации недопустимы. Убедитесь, что приложение корректно обрабатывает сценарии, в которых регистрация фоновых задач завершается ошибкой. Если вместо этого приложение зависит от наличия допустимого объекта регистрации после попытки регистрации задачи, это может завершиться сбоем.

Дополнительные сведения об использовании VS для отладки фоновой задачи см. в статье Как активировать приостановку, возобновление и фоновые события в приложениях UWP.