Windows 8 带来了一种新的应用程序生命周期模型,其中 Windows 商店应用程序会为用户自动管理。即使它们从未运行过,也没有显示在屏幕上,这些应用程序仍然是激活状态的。这对能量消耗和电池寿命来说有好处。下图是Windows 商店应用程序的生命周期模型图。
在这篇文章中,我们一起看看Visual Studio 2012在针对Windows 商店应用程序生命周期特点,所作出的调试改进,包括从JavaScript 调试,到Windows 8 模拟器,到Windows RT 设备上的远程调试。
模拟事件
在此过程中,我们遇到的第一个挑战是如何来模拟你的应用程序在现实世界使用中会遇到的事件,以便你可以调试这些有趣的情况。如何模拟应用程序被激活、被暂停以及被终止?
为了确保以上事件都可以简单方便的对应到Visual Studio中,Visual Studio中添加了以下三个命令:Suspend(暂停)、Resume( 继续)和" Suspend and Shutdown(暂停和关闭)"。
- 暂停:在应用程序处理事件之后,暂停命令让应用程序处于暂停状态。
- 继续:继续运行应用程序,使其重新进入运行状态,并将它作为在前台活动的应用程序。
- 暂停和关闭:"暂停和关闭"首先会"暂停"。然后终止应用程序,并停止调试。
你一定和我想的一样:为什么需要创建一个"暂停和关闭"的命令呢?此命令的目的是模拟当你的应用程序由Windows 8暂停和终止时,发生的自然顺序事件。例如,当你通过停止调试,来关闭应用程序,这时不会触发暂停事件。当你通过按 Alt + F4 或将其拖动到屏幕的底部来显式地关闭该程序。在这种情况下,在终止该应用程序之前,会触发一个暂停事件;但下一次用户激活该应用程序时,其PreviousExecutionState将是ClosedByUser (这不是VS2012试图模拟的).因此,"暂停和关闭"命令用来模拟应用程序被Windows暂停和终止,而不是由用户显式地关闭。
命令
在 Visual Studio 2012中,程序运行后工具栏中出现下拉Combo选择框,这些命令按钮在下拉列表中:
请注意"调试位置"工具栏不是总是被启用的。因此,如果你看不到此工具栏,请通过视图菜单启用它:
应用程序激活
在调试器中,我们可以模拟应用程序激活。
当你开始在 Visual Studio中调试Metro样式应用程序时,默认情况下,应用程序自动被激活。(这与磁片激活非常类似。)
不过,还有一些其他方式。例如,你的应用程序可以接收与另一个应用程序共享的某些内容,并通过协议或扩展激活。(有关其工作原理的更多信息,请参阅共享内容目标应用程序示例。)
Visual Studio 2012 中提供了功能来让你在某应用启动时自动进入调试状态,但是VS本身不会自动启动它(为了模拟这些其他激活的方案)。
当你设置此选项,启动调试你的项目时,Visual Studio 2012 将进入调试模式,但实际上没有运行任何东西。你还会注意到"调试位置"工具栏上显示了你的项目名称,而不是显示正在运行的进程。
这表明由该项目部署的应用程序软件包是在调试模式下,一旦该软件包的应用程序被激活了,调试器就会附加到进程中。
我们可以模拟与另一个应用程序共享文本,并选择示例应用程序作为共享目标。在这种情况下,应用程序被激活了,我们可以调试它。请注意,现在"调试位置"工具栏显示正在运行的实际进程(而不是之前的项目名称)。
调试后台任务
调试器可以模拟另一个 Windows 8 行为,这就是后台任务。后台任务是你的应用程序可能需要在后台执行某些操作,虽然这类应用程序不在屏幕上,也没有运行。
后台任务是由像计时器事件这样的系统事件所触发的。(你的应用程序至少需要运行一次来注册任务)。后台任务在提供寄宿的系统中正常运行,但是,你也可以为一些后台任务触发器提供你自己的可执行文件。无论哪个进程承载该任务,后台任务都作为你的软件包的一部分运行。
当你的软件在调试模式下时,一旦开始之后,调试器会自动附加到承载进程中。
假设,你可以在某一时间调试来自多个软件包的应用程序,我们需要在一个控件中展示这些,而且这个控件能够基于任务的数量而扩展。因此,VS2012添加这些到上图所示的同一"调试位置"工具栏下拉列表中。其结果是,为当前活动状态的软件包而注册的所有后台任务的触发器命令都将出现在此下拉列表中。作为一个例子,当调试后台任务示例时,注册之后,你将在下拉列表中看到以下后台任务。
下一步,若要调试后台任务,添加一个断点到OnNavigatedTo方法中,然后触发后台任务:
看到了吧,调试后台任务就这么简单 !