你不得不知道的Visual Studio 2012(2)- 全新调试功能

Windows 8 带来了一种新的应用程序生命周期模型,其中 Windows 商店应用程序会为用户自动管理。即使它们从未运行过,也没有显示在屏幕上,这些应用程序仍然是激活状态的。这对能量消耗和电池寿命来说有好处。下图是Windows 商店应用程序的生命周期模型图。

在这篇文章中,我们一起看看Visual Studio 2012在针对Windows 商店应用程序生命周期特点,所作出的调试改进,包括从JavaScript 调试,到Windows 8 模拟器,到Windows RT 设备上的远程调试。

模拟事件

在此过程中,我们遇到的第一个挑战是如何来模拟你的应用程序在现实世界使用中会遇到的事件,以便你可以调试这些有趣的情况。如何模拟应用程序被激活、被暂停以及被终止?

为了确保以上事件都可以简单方便的对应到Visual Studio中,Visual Studio中添加了以下三个命令:Suspend(暂停)、Resume( 继续)和" Suspend and Shutdown(暂停和关闭)"。

  1. 暂停:在应用程序处理事件之后,暂停命令让应用程序处于暂停状态。
  2. 继续:继续运行应用程序,使其重新进入运行状态,并将它作为在前台活动的应用程序。
  3. 暂停和关闭:"暂停和关闭"首先会"暂停"。然后终止应用程序,并停止调试。

你一定和我想的一样:为什么需要创建一个"暂停和关闭"的命令呢?此命令的目的是模拟当你的应用程序由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方法中,然后触发后台任务:

看到了吧,调试后台任务就这么简单 !

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何使用Prometheus监控CentOS 7服务器

Prometheus是由SoundCloud开发的开源监控系统。与其他监控系统(如InfluxDB和Graphite)一样,Prometheus将其所有数据存储...

1.4K00
来自专栏Youngxj

Linux查看实时带宽流量情况

1.7K40
来自专栏木头编程 - moTzxx

CentOS下如何更改默认的启动方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

12420
来自专栏Zchannel

Linux 流量监控工具 – iftop(安装、相关参数说明)

22330
来自专栏Zachary46

Android使用Jenkins自动化构建测试打包apk

Jenkins这东西搭建起来真是一点也不省心啊,看着别人的教程摸着石头过河,配置的东西有点多啊,稍有不慎,就构建不成功啦!即使步骤跟别人一样也会报各种乱七八糟的...

1K20
来自专栏梦魇小栈

adb设备信息查询修改刷机等命令

ADB很强大,记住一些ADB命令有助于提高工作效率。 通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK...

91130
来自专栏Flutter入门到实战

Flutter从配置安装到填坑指南详解

在 Google I/O ’17 上,Google 向我们介绍了 Flutter —— 一款新的用于创建移动应用的开源库。

3.3K50
来自专栏拂晓风起

Service Worker和HTTP缓存

16550
来自专栏云计算教程系列

如何使用Prometheus监视您的Ubuntu 14.04服务器

Prometheus是由SoundCloud开发的开源监控系统。与其他监控系统(如InfluxDB和Graphite)一样,Prometheus将其所有数据存储...

25600
来自专栏公众号_薛勤的博客

[原创作品]颠覆传统开发模式的web服务器

以Java web举例,现在的网站系统开发模式,对于web端和服务端的数据交互以及页面渲染,无外乎两种:

16420

扫码关注云+社区

领取腾讯云代金券