在 Visual Studio 中远程调试 C# 或 Visual Basic 项目

若要调试已在其他计算机上部署的 Visual Studio 应用程序,请在部署应用的计算机上安装并运行远程工具,将项目配置为从 Visual Studio 连接到远程计算机,然后运行应用。

远程调试器组件的屏幕截图。

有关远程调试通用 Windows 应用(UWP)的信息,请参阅 调试已安装的应用包

要求

从 Windows Server 2008 Service Pack 2 开始,远程调试器在 Windows 7 和更新版本以及 Windows Server 版本上受支持。 有关要求的完整列表,请参阅 要求

备注

不支持在通过代理连接的两台计算机之间进行调试。 不建议通过高延迟或低带宽(如拨号上网)连接或通过跨国家/地区的互联网进行调试,因为可能会失败或速度慢到无法接受。

下载并安装远程工具

在要调试的远程设备或服务器上,而不是 Visual Studio 计算机,从下表中的链接下载并安装正确的远程工具版本。

  • 下载 Visual Studio 版本的远程工具的最新更新。 早期远程工具版本与更高版本的 Visual Studio 不兼容。 (例如,如果使用 Visual Studio 2019,请下载 Visual Studio 2019 远程工具的最新更新。在此方案中,请勿下载适用于 Visual Studio 2022 的远程工具。
  • 下载与您要安装的计算机体系结构相同的远程工具。 例如,如果要在运行 x64 操作系统的远程计算机上调试 x86 应用程序,请安装 x64 远程工具。 若要在 ARM64 操作系统上调试 x86、ARM 或 x64 应用程序,请安装 ARM64 远程工具。
版本 链接 笔记
Visual Studio 2022 远程工具 与所有 Visual Studio 2022 版本兼容。 下载与设备操作系统(x86、x64(AMD64)或 ARM64 匹配的版本。 在较旧版本的 Windows Server 上,请参阅 取消阻止文件下载 以获取有关下载远程工具的帮助。
Visual Studio 2019 远程工具 Visual Studio 2019 的远程工具可从 My.VisualStudio.com 获取。 如果系统提示,请加入免费的 Visual Studio Dev Essentials 计划,或使用 Visual Studio 订阅 ID 登录。 下载与设备操作系统(x86、x64(AMD64)或 ARM64 匹配的版本。 在较旧版本的 Windows Server 上,请参阅 取消阻止文件下载 以获取有关下载远程工具的帮助。
Visual Studio 2017 远程工具 Visual Studio 2017 的远程工具可从 My.VisualStudio.com 获取。 如果系统提示,请加入免费的 Visual Studio Dev Essentials 计划,或使用 Visual Studio 订阅 ID 登录。 下载与设备操作系统(x86、x64(AMD64)或 ARM64 匹配的版本。 在 Windows Server 上,请参阅 取消阻止文件下载 以获取有关下载远程工具的帮助。
Visual Studio 2015 远程工具 Visual Studio 2015 的远程工具可从 My.VisualStudio.com 获取。 如果系统提示,请加入免费的 Visual Studio Dev Essentials 计划,或使用 Visual Studio 订阅 ID 登录。 在 Windows Server 上,请参阅 取消阻止文件下载 以获取有关下载远程工具的帮助。
Visual Studio 2013 远程工具 Visual Studio 2013 文档中的“下载”页
Visual Studio 2012 远程工具 Visual Studio 2012 文档中的“下载”页
版本 链接 笔记
Visual Studio 2019 远程工具 与所有 Visual Studio 2019 版本兼容。 下载与设备操作系统(x86、x64(AMD64)或 ARM64 匹配的版本。 在 Windows Server 上,请参阅 取消阻止文件下载 以获取有关下载远程工具的帮助。 对于最新版本的远程工具,请打开 Visual Studio 2022 文档
Visual Studio 2017 远程工具 与所有 Visual Studio 2017 版本兼容。 下载与设备操作系统(x86、x64(AMD64)或 ARM64 匹配的版本。 在 Windows Server 上,请参阅 取消阻止文件下载 以获取有关下载远程工具的帮助。
Visual Studio 2015 远程工具 Visual Studio 2015 的远程工具可从 My.VisualStudio.com 获取。 如果系统提示,请加入免费的 Visual Studio Dev Essentials 计划,或使用 Visual Studio 订阅 ID 登录。 在 Windows Server 上,请参阅 取消阻止文件下载 以获取有关下载远程工具的帮助。
Visual Studio 2013 远程工具 Visual Studio 2013 文档中的“下载”页
Visual Studio 2012 远程工具 Visual Studio 2012 文档中的“下载”页

可以通过将 msvsmon.exe 复制到远程计算机而不是安装远程工具来运行远程调试器。 但是,仅当安装远程工具时,远程调试器配置向导(rdbgwiz.exe)才可用。 如果要将远程调试器作为服务运行,可能需要使用向导进行配置。 有关详细信息,请参阅 (可选)将远程调试器配置为服务

备注

  • 若要在 ARM 设备上调试 Windows 10 或更高版本的应用,请使用 ARM64,它可用于最新版本的远程工具。
  • 若要在 Windows RT 设备上调试 Windows 10 应用,请使用 ARM(仅在 Visual Studio 2015 远程工具下载中可用)。
  • 若要在 ARM64 操作系统上调试 x64 应用,请运行随 ARM64 远程工具一起安装的 x64 msvsmon.exe。

提示

在某些情况下,从文件共享运行远程调试器可能最有效。 有关详细信息,请参阅 从文件共享运行远程调试器。

设置远程调试器

  1. 在远程计算机上,从“开始”菜单中找到并启动远程调试器

    如果远程计算机上没有管理权限,请右键单击 远程调试器 应用,然后选择 以管理员身份运行。 否则,请正常启动它。

    如果计划附加到以管理员身份运行的进程,或者正在其他用户帐户(如 IIS)下运行,请右键单击 远程调试器 应用,然后选择 以管理员身份运行。 有关详细信息,请参阅 以管理员身份运行远程调试器。

  2. 首次启动远程调试器(或在配置远程调试之前),将显示 远程调试配置 向导。

    在大多数情况下,请选择“下一步”,直到最后到达该向导的“配置 Windows 防火墙”页。

    远程调试器配置的屏幕截图。

    远程调试器配置的屏幕截图。

    如果未安装 Windows Web 服务 API(仅在 Windows Server 2008 R2 上发生),请选择“安装”按钮。

  3. 选择要在其中使用远程工具的至少一种网络类型。 如果计算机通过域连接,则必须选择第一项。 如果计算机通过工作组或家庭组连接,请根据需要选择第二项或第三项。

    接下来,选择 完成 以启动远程调试器。

    接下来,选择 配置远程调试 以启动远程调试器。

  4. 配置完成后,将显示 远程调试器 窗口。

    远程调试器窗口的屏幕截图,

    远程调试器窗口的屏幕截图,

    远程调试器现在正在等待连接。 使用显示的服务器名称和端口号在 Visual Studio 中设置远程连接配置。

若要停止远程调试器,请选择“文件”>“退出”。 可以从 开始 菜单或命令行重启它。

<Remote debugger installation directory>\msvsmon.exe

注意

如果需要为其他用户添加权限、更改远程调试器的身份验证模式或端口号,请参阅 配置远程调试器

远程调试项目

调试器无法将 Visual C# 或 Visual Basic 桌面应用程序部署到远程计算机,但仍可按如下所示远程调试它们。 以下过程假定要在名为 MJO-DL的计算机上对其进行调试,如下图所示。

  1. 创建名为 myWpf 的 WPF 项目。

    如果尝试远程调试 MAUI 应用而不是 WPF,请参阅 远程调试 Windows上的 .NET MAUI 应用。

  2. 设置代码中易于访问的某个位置的断点。

    例如,可以在按钮处理程序中设置断点。 为此,请打开 MainWindow.xaml,然后从工具箱中添加一个按钮控件,然后双击该按钮以打开其处理程序。

  3. 在解决方案资源管理器中,右键单击项目并选择 属性

  4. 属性 页上,选择 “调试”选项卡

    对于面向 .NET Core 或 .NET 5+ 的 C# 项目,从 Visual Studio 2022 开始,从“调试”选项卡中选择“调试启动配置文件 UI”,以配置远程调试设置

    显示适用于 C# 和 .NET 的 Visual Studio 项目属性中的“调试启动配置文件 UI”的屏幕截图。

    否则,对于 .NET Framework,可以直接在 “调试”选项卡中更改远程调试设置。

    Visual Studio 项目属性中“调试”选项卡的屏幕截图。Use remote machine 属性设置为“MJO-DL:4026”。

    Visual Studio 项目属性中“调试”选项卡的屏幕截图。Use remote machine 属性设置为“MJO-DL:4022”。

  5. 确保 工作目录 文本框为空。

  6. 选择 使用远程计算机,然后在文本框中键入 你的计算机名:端口。 (端口号显示在远程调试器窗口中。端口号在每个版本的 Visual Studio 中递增 2。

    在此示例中,请使用:

    Visual Studio 2022 上的 MJO-DL:4026

    Visual Studio 2019 上的 MJO-DL:4024

  7. 请确保未选中“启用本机代码调试”

  8. 构建项目。

  9. 在远程计算机上创建与 Visual Studio 计算机上的 调试 文件夹相同的文件夹:<源路径>\MyWPF\MyWPF\bin\Debug

  10. 将刚从 Visual Studio 计算机生成的可执行文件复制到远程计算机上的新创建文件夹。

    谨慎

    不要更改代码或重新生成(或者必须重复此步骤)。 复制到远程计算机的可执行文件必须与本地源和符号完全匹配。

    可以手动复制项目、使用 XCopy、Robocopy、PowerShell 或其他选项。

  11. 确保远程调试器在目标计算机上运行(如果不是,请在 “开始”菜单中搜索 远程调试器)。 远程调试器窗口如下所示。

    VS 2022 远程调试器窗口的屏幕截图。

    VS 2019 远程调试器窗口的屏幕截图。

  12. 在 Visual Studio 中,启动调试(调试 > 启动调试,或 F5)。

  13. 如果系统提示,请输入网络凭据以连接到远程计算机。

    所需的凭据因网络的安全配置而异。 例如,在域计算机上,可以输入域名和密码。 在非域计算机上,可以输入计算机名称和有效的用户帐户名称,例如 MJO-DL\name@something.com,以及正确的密码。

    应会看到 WPF 应用程序的主窗口在远程计算机上处于打开状态。

  14. 如有必要,请采取操作来命中断点。 你应看到该断点处于活动状态。 如果不是,则应用程序符号尚未加载。 请重试,如果这不起作用,请在了解符号文件和 Visual Studio 的符号设置中获取有关加载符号以及如何对其进行故障排除的信息。

  15. 在 Visual Studio 计算机上,应会看到执行已在断点处停止。

    如果应用程序需要使用任何非代码文件,则需要将其包含在 Visual Studio 项目中。 为其他文件创建项目文件夹(在 解决方案资源管理器中,单击 添加 > 新文件夹)。 然后将文件添加到文件夹(在 解决方案资源管理器中,单击 添加 > 现有项,然后选择文件)。 在每个文件的“属性”页中,将“复制到输出目录”设置为“始终复制”。

在 Windows 上远程调试 .NET MAUI 应用

.NET MAUI 应用是部署时需要注册的打包应用,而不仅仅是复制到远程计算机。 若要远程调试,可以部署应用未打包的版本。

使用以下方法之一远程调试:

  • 使用使用 CLI 发布适用于 Windows 的未打包 .NET MAUI 应用中所述的步骤将应用作为未打包应用发布到远程设备,然后按照本文中的步骤进行远程调试。 (跳过复制应用的步骤。

  • 按照本文中的步骤操作,包括为项目创建调试启动配置文件的步骤。 在开始调试之前,请手动编辑 launchSettings.json 文件,将 commandNameProject 值替换为 MsixPackage,如下所示。

    "Remote Profile": {
      "commandName": "MsixPackage",
      "remoteDebugEnabled": true,
      "remoteDebugMachine": "170.200.20.22",
      "authenticationMode": "None"
    }
    

    开始调试时,此方法首先部署应用解压缩的版本并启动它。

    说明

    将值更改为 MsixPackage后,无法在“调试启动配置文件”对话框中编辑 launchSettings.json

使用远程符号设置调试

应该能够使用在 Visual Studio 计算机上生成的符号调试代码。 使用本地符号时,远程调试器的性能要好得多。 如果必须使用远程符号,则需要告知远程调试监视器在远程计算机上查找符号。

你可以使用以下 msvsmon 命令行开关将远程符号用于托管代码:Msvsmon /FallbackLoadRemoteManagedPdbs

有关详细信息,请参阅远程调试帮助(在远程调试器窗口中按 F1,或单击 帮助 > 使用情况)。