Отладка фоновой задачи (приложения среды выполнения Windows)
[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]
Сведения о том, как отладить фоновую задачу, используя в том числе активацию фоновой задачи и данные по трассировке отладки в журнале событий Windows.
Что необходимо знать
Технологии
Необходимые условия
- В данной теме предполагается, что у вас есть существующее приложение с фоновой задачей, которую вам необходимо отладить.
Инструкции
Правильно задайте параметры проекта фоновой задачи
- Для приложений на языках C# и C++ основной проект должен ссылаться на проект фоновой задачи. Если такой ссылки нет, то фоновая задача не будет включена в пакет приложения. при помощи атрибута точки входа.
- Для программ на языках C# и C++ параметр Output type проекта фоновой задачи должен быть задан как "файл WinMD".
- Для приложений на JavaScript рабочий процесс фоновой задачи должен находиться в отдельном файле JavaScript.
- Фоновая задача должна быть объявлена в манифесте пакета. Задачи JavaScript объявляются при помощи атрибута начальной страницы, в то время как другие задачи объявляются при помощи атрибута точки входа.
Для отладки кода фоновых задач активируйте их вручную
Фоновые задачи могут быть запущены вручную через Microsoft Visual Studio Express 2012 для Windows 8. После этого вы можете по шагам выполнять код и отлаживать его.
В C# поместите точку останова в метод Run и/или напишите отладочный вывод, используя System.Diagnostics.
В C++ поместите точку останова в функцию Run и/или напишите отладочный вывод с помощью OutputDebugString.
В JavaScript поместите точку останова в файл JavaScript фоновой задачи и/или напишите отладочный вывод, используя debug object.
Запустите фоновую задачу с помощью раскрывающегося меню приостановки, доступного на панели инструментов Место отладки. В этом раскрывающемся меню отображаются имена фоновых задач, которые могут быть активированы Visual Studio.
Для того чтобы это работало, фоновая задача должна быть уже зарегистрирована и ожидать запуска. Например, если фоновая задача была зарегистрирована с одноразовым триггером времени, который уже был активирован, запуск задачи через Visual Studio не сработает.
Примечание Фоновые задачи, использующие ControlChannelTrigger или PushNotificationTrigger, и фоновые задачи, использующие SystemTrigger с типом триггера SmsReceived, не могут быть активированы подобным образом.
При активации фоновой задачи отладчик подключится к ней и отобразит отладочный вывод в Visual Studio.
Отладка активации фоновой задачи
Активация фоновой задачи зависит от правильного сочетания трех компонентов. Данная процедура показывает, как проверить эти компоненты и убедиться в их согласованности.
- Имя и пространство имен класса фоновой задачи (для JavaScript — путь и имя файла задачи)
- Атрибут точки входа, указанный в манифесте пакета (для JavaScript — атрибут начальной страницы)
- Точка входа, заданная приложением при регистрации фоновой задачи
Используя Visual Studio, определите точку входа фоновой задачи:
- Для приложений на языках C# и C++ определите имя и пространство имен класса фоновой задачи, указанные в проекте фоновой задачи.
- Для приложений на JavaScript определите путь и имя файла фоновой задачи.
Используя конструктор манифеста, проверьте, правильно ли объявлена фоновая задача в манифесте пакета:
- Для приложений на C# и C++ атрибут точки входа должен соответствовать пространству имен фоновой задачи, за которым следует имя класса. Например: Tasks.MyBackgroundTask.
- Для приложений на JavaScript атрибут начальной страницы должен представлять собой путь к файлу JavaScript с рабочим процессом фоновой задачи. Например: js\MyBackgroundTask.js.
- Должны также быть указаны все типы триггеров, используемых в задаче.
- Исполняемый файл НЕ СЛЕДУЕТ указывать, если только вы не используете ControlChannelTrigger или PushNotificationTrigger.
Только Windows. Чтобы увидеть точку входа, используемую Windows для активации фоновой задачи, включите трассировку отладки (enable debug tracing) и используйте журнал событий Windows.
Если после выполнения этой процедуры в журнале событий вы увидите неправильную точку входа или триггер для фоновой задачи, значит, ваше приложение неправильно регистрирует фоновую задачу. Подробнее об этой процедуре см. в разделе Регистрация фоновой задачи.
- Перейдите на начальный экран и откройте просмотр событий (для этого найдите и запустите файл eventvwr.exe).
- Перейдите в раздел Журналы приложения и служб -> Microsoft -> Windows -> BackgroundTaskInfrastructure в просмотре событий.
- На панели действий выберите Просмотр -> Отобразить аналитический и отладочный журналы для включения ведения журнала диагностики.
- Выберите Журнал диагностики и щелкните Включить журнал.
- Теперь попробуйте еще раз использовать ваше приложение для регистрации и активации фоновой задачи.
- Просмотрите в журналах диагностики подробную информацию об ошибке. Эта информация будет содержать точку входа, зарегистрированную для фоновой задачи.
Фоновые задачи и развертывание пакета Visual Studio
Если приложение, которое использует фоновые задачи, развернуто с помощью Visual Studio, а версия (основная или дополнительная), указанная в конструкторе манифеста, затем обновляется, то последующее повторное развертывание приложения с помощью Visual Studio может вызвать блокировку фоновых задач приложения. Эту проблему можно решить следующим образом:
- Используйте Windows PowerShell для развертывания обновленного приложения (вместо Visual Studio), запустив сценарий, созданный вместе с пакетом.
- Если вы уже развернули приложение с помощью Visual Studio и фоновые задачи приложения теперь блокированы, перезагрузите систему либо выйдите из системы и войдите снова, чтобы фоновые задачи приложения опять заработали.
- Вы можете выбрать параметр отладки "Всегда переустанавливать мой пакет", чтобы избежать этого в проектах C#.
- Подождите с обновлением версии пакета, пока приложение не будет готово к окончательному развертыванию (не меняйте ее во время отладки).
Замечания
Дополнительные советы по отладке фоновых задач:
- Фоновые задачи JavaScript должны по завершении вызывать функцию close(). Если фоновая задача не вызывает функцию close(), процесс задачи продолжает выполняться. Это может приводить к ненужному потреблению энергии батареи и непредсказуемому поведению.
- Убедитесь, что ваше приложение проверяет существующие регистрации фоновых задач перед новой регистрацией фоновой задачи. Неоднократная регистрация одной и той же фоновой задачи может вызвать неожиданные результаты, так как фоновая задача будет запускаться каждый раз при ее активации. Подробнее об этом см. в разделе Получение списка отложенных задач.
- Если фоновой задаче требуется доступ к экрану блокировки, то перед выполнением ее отладки необходимо, чтобы приложение было размещено на экране блокировки. Информацию об указании параметров манифеста для приложений с возможностью размещения на экране блокировки см. в разделах Отображение уведомлений на экране блокировки и Объявление фоновых задач в манифесте приложения.
- Начиная с Windows 8.1 параметры регистрации фоновых задач проверяются во время регистрации. Если какие-либо из параметров регистрации оказываются недопустимыми, возвращается ошибка. Убедитесь, что ваше приложение корректно обрабатывает ситуации, в которых регистрация фоновой задачи завершается ошибкой. Если же ваше приложение зависит от наличия допустимого объекта регистрации после регистрации задачи, то оно может аварийно завершиться. Например, можно проверять ошибки регистрации в условном операторе, а затем в случае ошибки повторять регистрацию с другими значениями параметров.
Дополнительные сведения об использовании Visual Studio для отладки фоновых задач см. в разделе об активации событий приостановки, возобновления и перевода в фоновый режим приложений Магазина Windows.
Связанные разделы
Краткое руководство: создание и регистрация фоновой задачи
Объявление фоновых задач в манифесте приложения
Руководство и контрольный список для фоновых задач
Активация событий приостановки, возобновления и перевода в фоновый режим приложений Магазина Windows
Анализ качества кода приложений Магазина Windows с помощью средства анализа кода Visual Studio