如果能够远程调试部署在 Azure 上的 Web App,将会极大的提高我们修复 bug 的效率。Visual Studio 一贯以功能强大、好用著称,当然可以通吃基于 Azure 应用的创建、发布和调试。接下来就让我们一起看看如何使用 Visual Studio 远程调试部署在 Azure 上的 Web App,以及一些常见的注意事项。

注意工具的版本

在开始正文前让我们先检查一下使用的 Azure SDK 版本和 Visual Studio 的版本。根据 MSDN 的介绍,Azure 的远程调试功能是在 Azure SDK 2.2 中加入的,所以请确保您的机器上安装了 2.2 或者是更新的 Azure SDK。
关于 Visual Studio 的版本问题,MSDN 上的描述也很有趣。大意是使用 Visual Studio 2012 已经可以远程调试 Azure 上的 Website 了,但是 Visual Studio 2013 又对此做了很多的提升。个人理解最好使用 VS2013,或者更新的版本。
笔者在写本文时的实验环境是 VS2015 update3 和 Azure SDK 2.9。

原理简介

如果我们要使用运行在机器A上的 Visual Studio 调试另外一台机器B上运行的一个程序 myapp (机器B上没有安装 visual studio),我们不仅要把附带 pdb 文件的 myapp 程序部署到机器B上,还要在机器B上运行一个调试辅助程序 msvsmon.exe。运行 msvsmon.exe 后,Visual Studio 就能够 attach 住 myapp 并使用其 pdb 文件进行调试。这就是 Visual Studio 的远程调试功能。而 msvsmon.exe 程序必须与特定版本的 Visual Studio 相匹配才能工作,所以它被集成在 Visual Studio 的安装包中,用时去 Visual Studio 的安装目录中搜索就能找到。

远程调试 Azure Web App 和上面的过程是一样的。只不过我们需要通过云端的配置来指定 msvsmon.exe 对应的 Visual Studio 版本,并告诉云端打开一些调试所需的端口。

下面就让我们一步步的踏上 VS 远程调试 Azure App 之路。

设置 Deployment credentials

这个不需要过多的解释,当我们部署网站时就需要创建这个账号。当然这个账号既可以用来部署又可以用来远程调试。

下载发布用的 publishing profile

Publishing profile 是用于进行发布操作的配置文件。当我们要发布一个网站或者是一个 web 应用时,需要很多的基本信息,比如服务器在哪里?用户名是什么?密码是什么?等等…这些信息统统保存在 publishing profile 文件中,有兴趣的朋友可以打开这个文件看看里面的详细信息。
无论调试与否,我们都要把应用发布到 Azure 上去,下载 publishing profile 先:

允许远程调试 Web App

设置 Application settings 中的远程调试为允许状态,并指定用于远程调试的 Visual Studio 版本。相关内容已经在原理部分讲过,这里说些需要注意的内容:
这两项设置是有期限的,在 48 小时之后默认会被关掉!
原因主要是性能和安全。所以建议大家在调试完成后立即关闭远程调试功能。

发布调试版本的 Web App

Visual Studio 的调试功能依赖于编译过程中产生的 pdb 文件。下面的设置就是让 Web App 在发布时编译为 debug 版本并产生对应的 pdb 文件。现在的 Visual Studio 已经可以智能的去找 pdb 文件了,所以这里我们不用关心 pdb 文件是被发布到了云端还是保存在本地(简单就好)!
先导入刚才下载的 publishing profile 文件:

在 Settings 中选择 Configuration 为”Debug”:

然后点击 “Publish”按钮进行发布。

Attach 远程进程

在 Attach 对话框中输入网站 URL 中去掉”http://”的部分,然后在弹出的对话框中输入我们在最开始处创建的用户名和密码。

列表中选择”w3wp.exe”:

在列出的进程点击”Attach”按钮就可以了。
心急的同学可要注意了,这里可能需要等待上那么一小会儿…

开始远程调试 Web App

当你看到设置的断点变成可用状态时,就可以尝试去触发一个断点了。

好了,看上去还不赖,能够工作了!

注意,实际使用过程中可能并不会这么的顺利。主要是在 attach 的时候,可能需要多试几次才能成功。调试的过程中速度也是个问题,感觉还是有点慢。
另外,调试 Web 程序经常会碰到让人很尴尬的一幕:正好有另外的一个用户在使用这个功能(可能是测试人员),此时不要太吃惊喔!

VS 远程调试 Azure Web App的更多相关文章

  1. 远程调试 Azure Web App

    当我们将 Web App 部署在 Azure 上时,如果能够实现远程调试,将会极大的提高我们修复 bug 的效率.Visual Studio 一贯以功能强大.易用著称,当然可以实现基于 Azure 应 ...

  2. 远程调试 Azure 上的 Website

    让我们先检查一下使用的 Azure SDK 版本和 Visual Studio 版本.根据MSDN的介绍,Azure 的远程调试功能是在 Azure SDK 2.2 中加入的,所以请确保您的机器上安装 ...

  3. Azure Web App (三)切换你的Net Core Web 项目的数据库连接字符串

    一,引言 上一篇文章讲到今天我们演示了一下,如何在Web App中创建 “Deployment Slot”进行快速无停机部署新功能代码,也使用VS进行发布到创建的Web App中创建的新的部署槽位中, ...

  4. 如何用Azure Web App Services接入微信公众号

    注:本文提到的代码示例下载地址>如何用Azure Web App Services接入微信公众号 如何用Azure Web App Services接入微信公众号 简介 此示例演示如何创建Azu ...

  5. Windows Azure HandBook (7) 基于Azure Web App的企业官网改造

    <Windows Azure Platform 系列文章目录> 1.用户场景: C公司是全球大型跨国连锁餐厅,在世界上大约拥有3万间分店.其IT系统主要部署其海外数据中心,或者租用其他ID ...

  6. Windows Azure Web Site (18) Azure Web App设置MIME

    <Windows Azure Platform 系列文章目录> 在笔者之前的文章中,介绍了我们在使用Azure Web App,可以把静态资源保存到Azure Storage中: Wind ...

  7. Azure Web App (一)发布你的Net Core Web 项目

    一,引言 今天我们看一下Azure上的一个服务-----Web 应用,我们都知道云计算的三大模式:Iaas(基础设施即服务),Paas(平台即服务),Saas(软件即服务). Iass,其实就是虚拟主 ...

  8. Azure Web App (二)使用部署槽切换部署环境

    一,引言 前天我们将到使用Azure的 Pass 服务 “Web App” 去部署我们的.NET Core Web项目,也同时有介绍到如何在VS中配置登陆中国区的Azure账号,今天接着讲,我们部署完 ...

  9. 一键将Web应用发布到云-Azure Web App

    我们现在越来越多的传统应用,逐步向云端迁移,原先私有云的部署模式,逐步向云端PaaS IaaS转变.例如: 我们在云端Azure中申请VM虚拟机,将我们的Web应用部署到VM的IIS中,同时做云服务的 ...

随机推荐

  1. 总结获取原生JS(javascript)的父节点、子节点、兄弟节点

    关于原生JS获取节点,一直是个头疼的问题,而且调用方法的名字又贼长了,所以我选择用JQ,好像跑题了-- 话不多说看代码 获取父节点 及 父节点下所有子节点(兄弟节点) <ul> <l ...

  2. 搞定pycharm专业版的安装

    学习python也有一段时间了,装了python2,也装了python3.对于IDE当然首选了人人拍掌叫好的pycharm.其实作为小白,一开始的时候并不知道什么是IDE,什么是pychram,以为装 ...

  3. python基础知识回顾之列表

    在python 中,主要的常用数据类型有列表,元组,字典,集合,字符串.对于这些基础知识,应该要能够足够熟练掌握. 如何创建列表: # 创建一个空列表:定义一个变量,然后在等号右边放一个中括号,就创建 ...

  4. 3.5星|《订阅》:Youtube对用户喜好的发现与应对

    订阅:数字时代的商业变现路径 主要内容我总结是Youtube对用户喜好的发现与应对.可以认为很多时候作者说的是Youtubu官方的态度与想法.穿插了许多Youtube上的成功创作者的故事. Youtu ...

  5. Python接口自动化--requests 1

    # _*_ encoding:utf-8 _*_ import requests #请求博客园首页,无参数的get请求 r = requests.get('http://www.cnblogs.com ...

  6. react-native-storage 使用笔记 持续更新

    React-native-storage是在AsyncStorage之上封装的一个缓存操作插件库,刚开始接触这个也遇到了一些问题,在这里简单记录总结一下,碰到了就记下来,持续更新吧 1.安卓下stor ...

  7. Nowcoder 提高组练习赛-R3

    https://www.nowcoder.com/acm/contest/174#question 今天的题好难呀,只有94个人有分.然后我就爆零光荣 考到一半发现我们班要上物理课,还要去做物理实验( ...

  8. BZOJ5369:[PKUSC2018]最大前缀和(状压DP)

    Description 小C是一个算法竞赛爱好者,有一天小C遇到了一个非常难的问题:求一个序列的最大子段和. 但是小C并不会做这个题,于是小C决定把序列随机打乱,然后取序列的最大前缀和作为答案. 小C ...

  9. Null和undefined的区别?

    (1)null是一个表示”无”的对象,转我数值是为0,undefined是一个表示”无”的原始值,转为数值时为NaN.当声明的变量还未被初始化时,能量的默认值为undefined (2)Null用来表 ...

  10. 八款开源 Android 游戏引擎 (巨好的资源)

    转载地址:http://software.intel.com/zh-cn/blogs/2012/01/13/android-4 初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道 ...