练习 - 将 Visual Studio 调试程序附加到应用服务 Web 应用

已完成

此时,应用已部署到 Azure,但无法正常运行。 应用仍然可以在本地运行,因此如果不进行进一步调查,就很难确定是什么原因导致了问题。 Visual Studio 可以通过将调试程序附加到 Azure 上的应用服务进程来轻松帮助你解决此问题。 此练习让你可以像在本地运行一样调试应用。

注意

在尝试附加调试程序之前,请始终确保本地代码的状态与部署到 Azure 的内容相匹配。 这可确保本地符号文件和源代码与部署的应用一致。 在实际应用中,如果使用 Git 管理项目,则需要签出已部署的相同提交或发布。

配置调试设置

确保在 Azure 中调试应用之前已在 Visual Studio 中完成了以下步骤,以确保成功。

  1. 首先,请确保至少成功生成你的项目一次。 成功生成项目可确保源代码和任何必要的编译文件都准备就绪。 如果应用程序在本地运行,请确保停止应用。

  2. 从 Visual Studio 顶部菜单中导航到“调试”>“选项”。 确保“启用仅我的代码”处于未选中状态,然后选择“确定”

    通过更改此设置,Visual Studio 可以调试使用本地 bin 文件夹中的必要符号文件部署到 Azure 的优化代码。 调试程序使用符号文件结合 Visual Studio 中已编译的执行代码与源代码,因此本地源代码务必与部署应用匹配。

    Visual Studio 调试设置的屏幕截图。

将调试程序附加到应用服务

  1. 从 Visual Studio 顶部的主菜单中,选择“调试”>“附加到进程”以打开相应的对话框。 使用此窗口可以连接并附加到不同的目标。 在这种情况下,你将连接到在上一步中创建的应用服务实例。

  2. 选择“连接类型”下拉列表,然后选择“Microsoft Azure 应用服务”选项

  3. 选择“连接目标”字段旁边的“查找...”按钮,打开对话框,通过该对话框浏览 Azure 订阅和应用服务

  4. 找到并选择在上一步中创建的 GitHubBrowser123 应用服务,然后选择“确定”

  5. w3wp.exe 进程应会出现在要连接的可用进程列表中,这是托管已部署应用程序的 Azure 应用服务的主进程。 选择该进程,然后选择右下角的“附加”,连接 Visual Studio 调试程序

    “附加到进程”功能的屏幕截图。

  6. Index.cshtml.cs 中,转到 OnPost 方法的第一行,并通过单击左边距在该方法中设置断点(或右键单击并选择“断点”>“插入断点”)。

    Index.cshtml.cs 中的 OnPost 方法处理应用的大部分逻辑。

  7. 你还可以选择验证 Visual Studio 是否已为调试会话加载了符号文件。 导航到“调试”>“Windows”>“模块”以打开模块窗口。 此窗口应指示,在加载之前所做的“仅我的代码”配置更改后,成功为 GitHub 浏览器 .dll 文件加载了符号文件。

    符号文件窗口的屏幕截图。

对 bug 进行故障排除

加载符号后,可以像在本地一样调试 Azure 托管应用。

  1. 在 Visual Studio 中设置断点后,切换到浏览器中的应用,在应用搜索框中输入值 dotnet,然后点击“提交”。 Visual Studio 将命中 OnPost 方法中的断点。 第一次同步可能需要一些时间。该代码将尝试使用 IConfiguration 服务检索 GitHubUrl 值。 默认情况下,配置服务从应用中的 appsettings.json 文件加载值。

  2. 使用 Visual Studio 调试控件上的跳过按钮(或按“F10”)移动到创建 searchUrl 的代码行。 如果将鼠标光标悬停在 githubUrl 变量上,你会发现该值当前为 null。 此代码在本地运行良好,那么为什么 Azure 中的值为 null 呢?

  3. 打开 appsettings.json 文件进行进一步调查。 在此文件中,有一些关于日志记录的配置设置,但找不到 GitHubUrl 值。

  4. 打开 appsettings.Development.json 文件。

    设置示例项目时,你更新了 appsettings.Development.json 中的配置设置。 此文件包含仅在开发期间运行时才会应用的配置,不包含在部署到 Azure 时应用的配置。 忘记为 Azure 中托管的应用程序的生产版本设置配置是常见的 bug 来源。

    应用程序开发设置的屏幕截图。

  5. appsettings.Development.json 复制 GitHubUrl 键值对并将其粘贴到顶层级 appsettings.json 文件中,确保两个文件匹配。 当应用再次部署到 Azure 时,新的配置值将在 appsettings.json 文件中随之出现。

    appsettings.json 文件应如下所示。

    应用程序设置的屏幕截图。

  6. 通过按下 Visual Studio 顶部的“停止”按钮,将调试程序与应用服务分离,就像本地调试会话一样。

  7. 若要重新部署所做的更改,请右键单击解决方案资源管理器中的项目节点,然后再次选择“发布”

  8. 在发布配置文件屏幕上,所有原始部署设置仍处于就位状态,所以请再次选择“发布”,以重新部署到 Azure

  9. 部署完成后,Visual Studio 将启动浏览器以再次显示应用。 再次在搜索窗体中输入 dotnet,然后按 Enter。 存储库列表现在将正确加载。

    祝贺你! 使用 Visual Studio 成功解决了 Azure 应用服务中的 bug。