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

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

Screenshot of remote debugger components.

如需详细了解如何远程调试通用 Windows 应用 (UWP),请参阅调试已安装的应用包

要求

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

注意

不支持在通过代理连接的两台计算机之间进行调试。 不建议通过高延迟或低带宽连接(如拨号 Internet)或跨国家/地区的 Internet 进行调试,否则可能会导致调试失败或速度过慢。

下载和安装远程工具

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

  • 下载适用于 Visual Studio 版本的远程工具的最新更新。 早期远程工具版本与更高版本的 Visual Studio 不兼容。 (例如,如果使用的是 Visual Studio 2019,请下载 Visual Studio 2019 远程工具的最新更新。在这种情况下,请不要下载 Visual Studio 2022 远程工具。)
  • 下载与要安装远程工具的计算机具有相同体系结构的远程工具。 例如,如果要在运行 x64 操作系统的远程计算机上调试 x86 应用程序,请安装 x64 远程工具。 若要在 ARM64 操作系统上调试 x86、ARM 或 x64 应用程序,请安装 ARM64 远程工具。
Version 链接 说明
Visual Studio 2022 远程工具 兼容所有 Visual Studio 2022 版本。 下载与设备操作系统(x86、x64 或 ARM64)匹配的版本。 在较旧版本的 Windows 服务器上,请参阅取消阻止文件下载,获取有关下载远程工具的帮助。
Visual Studio 2019 远程工具 兼容所有 Visual Studio 2019 版本。 下载与设备操作系统(x86、x64 或 ARM64)匹配的版本。 在较旧版本的 Windows 服务器上,请参阅取消阻止文件下载,获取有关下载远程工具的帮助。
Visual Studio 2017 远程工具 兼容所有 Visual Studio 2017 版本。 下载与设备操作系统(x86、x64 或 ARM64)匹配的版本。 在 Windows 服务器上,请参阅取消阻止文件下载,获取有关下载远程工具的帮助。
Visual Studio 2015 远程工具 Visual Studio 2015 的远程工具可从 My.VisualStudio.com 获取。 如果出现提示,请加入免费的 Visual Studio Dev Essentials 计划,或使用 Visual Studio 订阅 ID 登录。 在 Windows 服务器上,请参阅取消阻止文件下载,获取有关下载远程工具的帮助。
Visual Studio 2013 远程工具 Visual Studio 2013 文档中的下载页面
Visual Studio 2012 远程工具 Visual Studio 2012 文档中的下载页面
Version 链接 说明
Visual Studio 2019 远程工具 兼容所有 Visual Studio 2019 版本。 下载与设备操作系统(x86、x64 或 ARM64)匹配的版本。 在 Windows 服务器上,请参阅取消阻止文件下载,获取有关下载远程工具的帮助。 有关最新版远程工具的信息,请打开 Visual Studio 2022 文档
Visual Studio 2017 远程工具 兼容所有 Visual Studio 2017 版本。 下载与设备操作系统(x86、x64 或 ARM64)匹配的版本。 在 Windows 服务器上,请参阅取消阻止文件下载,获取有关下载远程工具的帮助。
Visual Studio 2015 远程工具 Visual Studio 2015 的远程工具可从 My.VisualStudio.com 获取。 如果出现提示,请加入免费的 Visual Studio Dev Essentials 计划,或使用 Visual Studio 订阅 ID 登录。 在 Windows 服务器上,请参阅取消阻止文件下载,获取有关下载远程工具的帮助。
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 防火墙”页。

    Screenshot of remote debugger configuration.

    Screenshot of remote debugger configuration.

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

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

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

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

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

    Screenshot of remote debugger window

    Screenshot of remote debugger window

    远程调试器正在等待连接。 使用显示的服务器名称和端口号在 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”,以配置远程调试设置。

    Screenshot of the Debug launch profile UI in the Visual Studio Project Properties for C# and .NET.

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

    Screenshot of the Debug tab in the Visual Studio Project Properties. The Use remote machine property is set to 'MJO-DL:4022'.

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

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

    在此示例中,使用:

    Visual Studio 2022 上的 MJO-DL:4026

    Visual Studio 2019 上的 MJO-DL:4024

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

  8. 生成项目。

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

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

    注意

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

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

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

    Screenshot of remote debugger window for VS 2022.

    Screenshot of remote debugger window for 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 或依次单击“帮助”>“用法”)。