Поделиться через


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

Важные API

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

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

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

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

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

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

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

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

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

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

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

    Примечание.

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

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

    Примечание.

    Фоновые задачи, использующие следующие триггеры, нельзя активировать таким образом: триггер приложения, триггер MediaProcessing, ControlChannelTrigger, PushNotificationTrigger и фоновые задачи с помощью SystemTrigger с типом триггера SmsReceived.
    Триггер приложения и MediaProcessingTrigger можно сигнализировать вручную в коде.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".