如何调试后台任务(Windows 运行时应用)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

了解如何调试后台任务,其中包括后台任务激活和调试 Windows 事件日志中的跟踪。

你需要了解的内容

技术

先决条件

  • 本主题假定你已拥有一个带有要调试的后台任务的现有应用。

说明

请确保正确设置了后台任务项目

  • 在 C# 和 C++ 中,确保主项目引用后台任务项目。如果此引用没有到位,则后台任务将不包括在应用包中。使用入口点属性。
  • 在 C# 和 C++ 中,确保后台任务项目的 Output type 是 "WinMD 文件"。
  • 在 JavaScript 中,后台任务 worker 必须位于自己的 JavaScript 文件中。
  • 后台任务必须在包清单中声明。JavaScript 任务使用起始页属性进行声明,而其他任务使用入口点属性进行声明。

手动触发后台任务以调试后台任务代码

通过 Microsoft Visual Studio Express 2012 for Windows 8,可以手动触发后台任务。然后可以单步执行代码并对其进行调试。

  1. 在 C# 中,在 Run 方法中放置断点,和/或通过使用 System.Diagnostics 编写调试输出。

    在 C++ 中,在 Run 函数中放置断点,和/或通过使用 OutputDebugString 编写调试输出。

    在 JavaScript 中,在后台任务 JavaScript 文件中放置断点,和/或通过使用 debug object 编写调试输出。

  2. 使用“调试位置”工具栏中提供的“暂停”下拉菜单触发后台任务。此下拉菜单显示可以被 Visual Studio 激活的后台任务的名称。

    若要此功能正常运行,则后台任务必须已注册并且必须仍等待触发。例如,如果后台任务已使用一次性 TimeTrigger 注册,并且该触发器已引发,则通过 Visual Studio 启动该任务将无效。

    注意  使用 ControlChannelTriggerPushNotificationTrigger 的后台任务,以及使用触发器类型为 SmsReceivedSystemTrigger 的后台任务,均无法采用此方式激活。

     

    调试后台任务

  3. 激活后台任务时,调试程序将附加到该后台任务并在 VS 中显示调试输出。

调试后台任务激活

后台任务能否激活取决于是否正确匹配三项内容。下面的过程展示如何检查并确保所有这三项内容均正确匹配。

  • 后台任务类的名称和命名空间(对于 Javascript 为后台任务的路径和文件名)
  • 在包清单中指定的入口点属性(对于 Javascript 为起始页属性)
  • 在注册后台任务时由应用指定的入口点
  1. 使用 Visual Studio 标注后台任务的入口点:

    • 在 C# 和 C++ 中,标注在后台任务项目中指定的后台任务类的名称和命名空间。
    • 在 JavaScript 中,标注后台任务文件的路径和文件名。
  2. 使用清单设计器检查是否在包清单中正确声明了后台任务:

    • 在 C# 和 C++ 中,入口点属性必须与后台任务的命名空间相匹配而且后面必须跟着类名。例如:Tasks.MyBackgroundTask。
    • 在 JavaScript 中,起始页属性必须是后台任务 worker 的 JavaScript 文件的路径。例如:js\MyBackgroundTask.js。
    • 还必须指定与后台任务一起使用的所有触发器类型。
    • 除非你使用 ControlChannelTriggerPushNotificationTrigger,否则不得指定可执行文件。
  3. 仅适用于 Windows。若要查看 Windows 用来激活后台任务的入口点,请enable debug tracing并使用 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# 项目中避免此问题。
  • 在应用准备最后部署以递增包版本前(调试期间不更改版本)处于等待状态。

备注

调试后台任务的其他技巧:

  • JavaScript 后台任务在完成时需要调用 close()。如果后台任务不调用 close(),则该任务的进程仍继续运行。这会浪费电池的寿命,而且会导致意外的行为。
  • 请确保应用在再次注册后台任务前检查现有后台任务注册情况。通过每次触发后台任务时多次运行该任务而多次注册同一后台任务可导致异常结果。有关此任务的帮助,请参阅如何获取待完成后台任务的列表
  • 如果后台任务需要锁屏界面访问权限,请确保在尝试调试后台任务之前将应用放在锁屏界面上。有关为支持锁屏界面的应用指定清单选项的信息,请参阅如何在锁屏界面上显示通知在应用程序清单中声明后台任务
  • 从 Windows 8.1 开始,后台任务注册参数在注册时进行验证。如果任何注册参数无效,则会返回一个错误。确保你的应用能够流畅地处理后台任务注册失败的情况,否则,如果你的应用依赖于在尝试注册任务后具备有效注册对象,则它可能会崩溃。例如,应用可以使用条件语句来检查注册错误,然后使用其他参数值重试失败的注册。

有关使用 VS 调试后台任务的详细信息,请参阅如何在 Windows 应用商店应用中触发暂停、恢复和后台事件

相关主题

快速入门:创建和注册后台任务

如何注册后台任务

如何在应用程序清单中声明后台任务

后台任务指南和清单

清单设计器

如何在 Windows 应用商店应用中触发暂停、恢复和后台事件

使用 Visual Studio 代码分析来分析 Windows 应用商店应用的代码质量