在 Visual Studio 中调试 Azure 云服务(扩展支持)服务
Visual Studio 提供了用于调试 Azure 云服务(扩展支持)和虚拟机的不同选项。
先决条件
- 安装了“Azure 开发”工作负载以及单个组件“.NET Framework 项目和项模板”的 Visual Studio(请参阅 [Visual Studio 下载] (https://visualstudio.microsoft.com/downloads/?cid=learn-onpage-download-cta))。 请参阅修改 Visual Studio。
- Azure 帐户。 如果没有 Azure 帐户,请激活你的 Visual Studio 订阅者 Azure 权益或注册免费试用版。
在本地计算机上调试云服务
可以使用 Azure 计算模拟器在本地计算机上调试云服务,从而节省时间和金钱。 通过在部署服务之前在本地调试服务,可以提高可靠性和性能,而无需为计算时间付费。 但是,只有在 Azure 本身中运行云服务时,才会发生一些错误。 如果在发布服务时启用远程调试,然后将调试器附加到角色实例,则可以调试这些错误。
模拟器模拟 Azure 计算服务并在本地环境中运行,以便在部署云服务之前对其进行测试和调试。 模拟器处理角色实例的生命周期,并提供对模拟资源(例如本地存储)的访问权限。 从 Visual Studio 调试或运行服务时,它会自动启动模拟器作为后台应用程序,然后将服务部署到模拟器。 当服务在本地环境中运行时,可以使用模拟器查看服务。 可以运行完整版本或模拟器的快速版本。 请参阅 使用 Emulator Express 在本地运行和调试云服务。
在本地计算机上调试云服务
在菜单栏上,选择 调试>开始调试 来运行你的 Azure 云服务(扩展支持)项目。 或者,可以按 F5。 你将看到一条消息,指出计算模拟器正在启动。 模拟器启动时,系统托盘图标会确认它。
通过在通知区域中打开 Azure 图标的快捷菜单,然后选择 显示计算模拟器 UI来显示计算模拟器的用户界面。
UI 的左窗格显示当前部署到计算模拟器的服务以及每个服务正在运行的角色实例。 可以选择服务或角色,在右窗格中显示生命周期、日志记录和诊断信息。 如果将焦点置于包括窗口的上边距中,则该窗口将展开以填写右侧窗格。
通过选择 调试 菜单上的命令并在代码中设置断点来逐步调试应用程序。 在调试器中单步执行应用程序时,窗格会随着应用程序的当前状态而更新。 停止调试时,将删除应用部署配置。 如果应用程序包含 Web 角色,并且已设置启动操作属性以启动 Web 浏览器,Visual Studio 将在浏览器中启动 Web 应用程序。 如果更改服务配置中某个角色的实例数,则必须停止云服务,然后重启调试,以便可以调试角色的这些新实例。
说明
停止运行或调试服务时,不会停止本地计算模拟器和存储模拟器。 必须从通知区域显式将其停止。
在 Azure 中调试云服务
如果使用本部分中的过程为云服务启用远程调试,则不会显示性能下降或产生额外费用。 不要对生产服务使用远程调试,因为使用该服务的客户端可能会受到不利影响。
为云服务启用远程调试(扩展支持)
在 ServiceDefinition.csdef 中为默认的 msvsmon 端口添加一个终端。 对于 Visual Studio 2019,它是 4024。
<Endpoints> <InputEndpoint name="RemoteDebug" protocol="tcp" port="4024" localPort="4024" /> </Endpoints>
说明
其他版本的 Visual Studio 具有不同的端口 远程调试器端口分配。
打开 Azure 项目的快捷菜单,然后选择 发布。
选择“过渡”环境和“调试”配置。
这只是一个准则。 可以选择在生产环境中运行测试环境。 但是,如果在生产环境中启用远程调试,可能会对用户产生负面影响。 可以选择“发布”配置,但调试配置可简化调试。
按照 云服务(扩展支持)中所述的常规步骤操作,但选中 为所有角色启用远程桌面 复选框。
系统将要求你为远程桌面用户创建用户名和密码,稍后需要登录到该虚拟机。
转到下一个屏幕,查看设置,准备就绪后,单击 发布 并等待部署完成。
登录到 Azure 门户 并导航到要调试的云服务(扩展支持)。
在左侧窗格中选择 角色和实例,然后选择想要远程调试的角色。
单击右侧 角色实例 弹出窗口中的 连接,然后选择“Connect”按钮下载远程桌面文件,以便登录到虚拟机。 使用在上一步中启用远程桌面时创建的凭据登录。
在远程 Azure 虚拟机上,安装 Visual Studio 2019 远程工具,如 远程调试中所述。
在虚拟机上的桌面上,执行命令 D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Remote Debugger\x64\msvsmon.exe。 请务必以管理员身份运行。
接受提示以允许通过防火墙进行访问。 应会看到一条消息,指示 msvsmon.exe 已开始侦听连接。
在 Azure 门户中,打开资源组并获取云服务的公共 IP 地址(扩展支持)。
将调试器附加到 Azure 中的云服务(扩展支持)
说明
尽可能使用在发布过程中选择的调试配置进行调试,但是,如果要调试发布配置,请在 Visual Studio 中使用Ctrl+Q 搜索“Just My Code”,并在Tools>Options>>General中取消选中“Enable Just My Code”。 发布版本经过优化,因此不被视为“我的代码”。
选择“调试”>“附加到进程”(或按 Ctrl+Alt+P)。
将连接类型保留为默认 。
使用 IP 地址和端口输入连接目标:
{ipaddress}:4024
。将“附加到”设置为“自动”。
使用与远程桌面用户相同的凭据登录。
选择“显示所有用户的进程”。 如果要调试辅助角色,请附加到 WaWorkerHost.exe,如果要调试 Web 角色,请附加到 w3wp.exe 进程,对于 Web API 角色,请附加到 WaIISHost.exe。
设置断点(导航到行,然后按 F9),访问站点的公共 URL,并重现要调试的场景。
为云服务启用远程调试(扩展支持)
将终结点添加到默认 msvsmon 端口的 ServiceDefinition.csdef。 对于 Visual Studio 2022,即 4026;对于 Visual Studio 2019,为 4024。
<Endpoints> <InputEndpoint name="RemoteDebug" protocol="tcp" port="4026" localPort="4026" /> </Endpoints>
说明
其他版本的 Visual Studio 具有不同的端口,请参阅远程调试器端口分配。
如果要面向 .NET 4.8,请确保在发布云服务(扩展支持)时打开 ServiceConfiguration.Cloud.cscfg 文件,并检查
ServiceConfiguration
元素上的osFamily
属性的值。 对于 .NET 4.8 项目,请使用osFamily="7"
。打开 Azure 项目的快捷菜单,然后选择 发布。
选择“过渡”环境和“调试”配置。
这只是一个准则。 可以选择在生产环境中运行测试环境。 但是,如果在生产环境中启用远程调试,可能会对用户产生负面影响。 可以选择“发布”配置,但调试配置可简化调试。
按照 云服务(扩展支持)中所述的常规步骤操作,但选中 为所有角色启用远程桌面 复选框。
系统将要求你为远程桌面用户创建用户名和密码,稍后需要登录到该虚拟机。
转到下一个屏幕,查看设置,准备就绪后,单击 发布 并等待部署完成。
登录到 Azure 门户 并导航到要调试的云服务(扩展支持)。
在左侧窗格中选择 角色和实例,然后选择想要远程调试的角色。
单击右侧 角色实例 弹出窗口中的 连接,然后选择“Connect”按钮下载远程桌面文件,以便登录到虚拟机。 使用在上一步中启用远程桌面时创建的凭据登录。
在远程 Azure 虚拟机上,安装 Visual Studio 2022 远程工具,如 远程调试中所述。
在虚拟机上的桌面上,在
Common7\IDE\Remote Debugger\x64
下的 Visual Studio 安装文件夹中执行命令 msvsmon.exe。 请务必以管理员身份运行。接受提示以允许通过防火墙进行访问。 应会看到一条消息,指示 msvsmon.exe 已开始侦听连接。
在 Azure 门户中,打开资源组并获取云服务的公共 IP 地址(扩展支持)。
将调试器附加到 Azure 中的云服务(扩展支持)
说明
尽可能使用在发布 过程中选择的调试配置进行调试。但如果要调试发布 配置,请在 Visual Studio 中使用Ctrl+Q 搜索“仅我的代码”,并在工具>选项>调试器>常规中取消选中“启用仅我的代码”。 发布版本经过优化,因此不被视为“我的代码”。
选择 调试>附加到进程(或按 Ctrl+Alt+P)。
将连接类型保留为默认 。
使用 IP 地址和端口输入连接目标:
{ipaddress}:4026
。将“附加到”设置为“自动”。
使用与远程桌面用户相同的凭据登录。
选择“显示所有用户的进程”。 如果要调试辅助角色,请附加到 WaWorkerHost.exe;如果要调试 Web 角色,请附加到 w3wp.exe 进程;对于 Web API 角色,请附加到 WaIISHost.exe。
设置断点(导航到行,然后按 F9),访问站点的公共 URL,并重现要调试的场景。
Azure 中远程调试的限制
远程调试具有以下限制:
启用远程调试后,无法发布任何角色具有 25 个以上的实例的云服务。
调试器使用端口 30400 到 30424、31400 到 31424 和 32400 到 32424。 如果尝试使用这些端口中的任何一个,将无法发布服务,以下错误消息之一将显示在 Azure 的活动日志中:
- 根据 .csdef 文件验证 .cscfg 文件时出错。
角色“role”的终结点
Microsoft.WindowsAzure.PlugIns.RemoteDebugger.Connector
的保留端口范围“range”与已定义的端口或范围重叠。 - 分配失败。 稍后重试,尝试减少 VM 大小或角色实例数,或尝试部署到其他区域。
- 根据 .csdef 文件验证 .cscfg 文件时出错。
角色“role”的终结点
调试 Azure 应用服务
可以使用 Visual Studio 中的“附加到进程”对话框调试在 Azure 应用服务中运行的程序。
备注
这仅适用于从 Visual Studio 2022 17.1 开始的 Azure 应用服务。
调试 Windows Azure 应用服务
在“调试”下,选择“附加到进程”。
将“连接类型”更改为“Microsoft Azure 应用服务”,然后选择“查找...”。
在打开的对话框中,选择 订阅名称。
备注
需要登录到一个 Microsoft 帐户,该帐户有权访问包含 Azure 应用服务的订阅。
按资源组或资源类型筛选视图,或按名称搜索。
接下来,选择要调试的应用服务,然后选择“确定”。
这将在应用服务上启用远程调试,并显示要附加到的可用进程列表。
选择要附加到的进程,然后选择“附加”以开始调试。
调试 Azure 虚拟机
可以在 Visual Studio 中使用服务器资源管理器调试在 Azure 虚拟机上运行的程序。 在 Azure 虚拟机上启用远程调试时,Azure 会在虚拟机上安装远程调试扩展。 然后,可以像平常一样附加到虚拟机上的进程并进行调试。
说明
可以通过在 Visual Studio 2019 中使用云资源管理器远程调试通过 Azure 资源管理器创建的虚拟机。 有关详细信息,请参阅 使用 Cloud Explorer管理 Azure 资源。
调试 Azure 虚拟机
在服务器资源管理器中,展开“虚拟机”节点,然后选择要调试的虚拟机的节点。
打开上下文菜单并选择 启用调试。 当系统询问是否确定要在虚拟机上启用调试时,请选择“是”。
Azure 在虚拟机上安装远程调试扩展以启用调试。
远程调试扩展安装完成后,打开虚拟机的上下文菜单,然后选择“附加调试器...”
Azure 获取虚拟机上进程的列表,并在 附加到进程 对话框中显示这些进程。
在 “附加到进程”对话框中,选择 “选择” 来限制结果列表,以仅显示要调试的代码类型。 可以调试 32 位或 64 位托管代码、本机代码或两者兼有。
选择要在虚拟机上调试的进程,然后选择 附加。 例如,如果要在虚拟机上调试 Web 应用,则可以选择 w3wp.exe 过程。 有关详细信息,请参阅 在 Visual Studio 中调试一个或多个进程,并 Azure 角色体系结构。
创建 Web 项目和用于调试的虚拟机
在发布 Azure 项目之前,您可能会发现,在一个支持调试和测试场景的受控环境中测试项目,并在其中安装测试和监视程序是很有用的。 运行此类测试的一种方法是在虚拟机上远程调试应用。
Visual Studio ASP.NET 项目提供了一个选项,可用于创建一个可用于应用测试的方便虚拟机。 该虚拟机包含通常需要的终结点,例如 PowerShell、远程桌面和 WebDeploy。
创建 Web 项目和用于调试的虚拟机
在 Visual Studio 中,创建新的 ASP.NET Web 应用程序。
在“新建 ASP.NET 项目”对话框中的“Azure”部分中,选择下拉列表框中 虚拟机。 请保持“创建远程资源”复选框处于选中状态。 选择“确定”以继续。
“在 Azure 上创建虚拟机”对话框随即显示。
说明
如果尚未登录,系统会要求你登录到 Azure 帐户。
选择虚拟机的各种设置,然后选择“确定”。 有关详细信息,请参阅 虚拟机。
为 DNS 名称输入的名称将是虚拟机的名称。
Azure 创建虚拟机,然后预配和配置终结点,例如远程桌面和 Web 部署。
完全配置虚拟机后,在服务器资源管理器中选择虚拟机的节点。
打开上下文菜单并选择 “启用调试”。 当系统询问是否确定要在虚拟机上启用调试时,请选择“是”。
Azure 将远程调试扩展安装到虚拟机以启用调试。
根据如何:在 Visual Studio 中使用一键式发布来部署 Web 项目中所述的方法发布你的项目。 由于想要在虚拟机上进行调试,因此,请在“发布 Web”向导的“设置”页上选择“调试”作为配置。 这可确保代码符号在调试时可用。
在 文件发布选项中,选择 在目标 删除其他文件(如果项目已在早期部署)。
项目发布后,在服务器资源管理器中的虚拟机上下文菜单上,选择“附加调试器...”
Azure 获取虚拟机上进程的列表,并在 附加到进程 对话框中显示这些进程。
在 “附加到进程”对话框中,选择 “选择” 来限制结果列表,以仅显示要调试的代码类型。 可以调试 32 位或 64 位托管代码、本机代码或两者兼有。
选择要在虚拟机上调试的进程,然后选择 附加。 例如,如果要在虚拟机上调试 Web 应用,则可以选择 w3wp.exe 过程。 有关详细信息,请参阅 在 Visual Studio 中调试一个或多个进程。
相关内容
使用“Azure 诊断”记录 Azure 中角色中运行的代码的详细信息。 请参阅使用 Azure 诊断收集日志记录数据。
有关其他远程调试方案,请参阅 远程调试。