1、1. 概述 - 如何从 Visual Studio 进行 远程调试? 2. 命令行 - 什么是远程调试器 命令行选项? 它们的功能是什么? 3. 安装 - 如何安装远程调试? 4. 安全性 - 在进行远程调试时 有哪些安全性选项可用? 5. 用户界面 - 用户界面选项 有何功能? 6. 防火墙配置 - 远程 调试器如何通过防火墙? 7. Windows Web 服务 - 远程调试器为何 需要 Windows Web 服务? 8. 运行远程调试器的多个 实例 - 多个用户如何在同一台共享计算机上运 行远程 调试器? 9. 服务 - 是否应将远程调试器作为 服务来运行? 概述概述 通过远程调试,可
2、以调试在其他计算机(而非正在运行 Visual Studio 的计算机) 上运行的程序。 通过此版本的 Visual Studio,远程调试变得前所未有的容易。基本步骤: 1. 在要进行调试的计算机上运行远程调试器(msvsmon.exe)。 有关详细信息, 请参阅 设置帮助。 2. 配置 Visual Studio 以连接到远程调试器 o 如果要启动 C#/VB 项目: 打开项目的属性(在解决方案资源 管理 器中右击),然后在“调试”选项卡上,选中使用远程计算机的选 项。 o 如果要启动 C+ 项目: 打开项目的属性(在解决方案资源 管理器 中右击),然后在“调试器”菜单上,将“要启动的调试
3、器”值更 改 为“远程 Windows 调试器”。 将“远程命令”属性设置为远程 计算机应 使用的路径。 o 附加到已运行的进程: 从“工具”或“调试”菜单 启动“附加到 进程”对话框, 然后在“限定符”编辑框中输入远程计算机 名称。 o 调试网站: 从远程文件共享打开网站, 然后将 “自定义 Web 服务 器”属性配置为 Web 服务器的 URL(例如: http:/myserver)。 o 启动不带项目的可执行文件: 创建调试器项目,具体方法是将 可 执行文件作为项目打开(“文件”-“打开项目”), 并输入要调试 的可执行 文件的路径(例如: MyTestComputerc$MyTest.
4、exe)。 然后打开项目属性 并更改“连接”属性。另外将“可执行文件” 属性更改为远程 计算机应使用的路径。 3. 启动调试 命令行命令行 所有远程调试器命令行选项的说明 选项选项 说明说明 /allow user_name 允许指定用户连接到远程调试器。应当仅允 许完全信任的 用户进行调试。如果授予恶意 用户连接权限, 他们就能够接管运行远程调 试器的用户的 用户帐户。用户名应使用分号 或逗号隔开(例如: SomeDomainBob;SomeDomainAlice) /port port_number 更改远程调试器侦听的 TCP/IP 端口号。此 选项通常 用于允许远程调试器的多个实例 在
5、同一台计算机上运行。 /wow64port port_number (仅限 Windows x64) 在 Windows x64 上,远程调试器监听其他端 口,以允许调试在 WOW64 (Windows 64 位系 统上的 Windows 32 位子系统)仿真层下运行 的 32 位进程。 可通过 /wow64port 选项配 置此端口号。这对于适应硬件防火墙可能很 有用。 如果未指定,调试程序将尝试使用 4025, 但如果 4025 已在使用中,则将回退 到任意未使用的端口。 请注意,建议不要求 Visual Studio 直接连 接到此端口,因为这将只 允许调试 32 位进 程。相反,如果
6、Visual Studio 连接到主端 口(请参阅 /port), 则它将在需要时自动切 换到 32 位端口。 /timeout number_of_seconds 配置远程调试器在无用户连接时在退出之前 等待的秒数。在 Windows 身份验证模式下, 默认的超时时间为无限。 在无身份验证模式 中,默认的超时时间为 15 分钟。 /noauth 将远程调试器从 Windows 身份验证模式切 换到无身份验证 模式。有关详细信息,请参 阅安全性。 /anyuser 在无身份验证模式下,Visual Studio 将当 前用户的用户名发送到 远程调试器。远程调 试器使用此用户名进行安全检查, 以
7、防用户 意外连接到其他用户的远程调试器。 此选项 禁用安全检查,以便任何用户都可以连接。 /nostatus 启动远程调试器,且隐藏状态窗口。可以通 过远程 调试器的系统栏图标显示状态窗口。 /nodiscovery 在禁用发现的情况下启动远程调试器。此远 程调试器实例 不会出现在 Visual Studio 的“查找远程调试器实例”对话框中。 /silent 通知远程调试器不要显示用户界面。 /prepcomputer 选项 为进行远程调试准备好此计算机,具体方法 是确保 Windows 防火墙已配置。若要使用 /prepcomputer,应以管理员身份 启动 msvsmon。 可以与 /p
8、repcomputer 一起传递几个其他 开关。 常规选项: /quiet : 会取消显示错误对话框(或其他阻 止 UI)。 msvsmon.exe 进程的退出代码会指 示任何错误。 /nofirewall : 不应配置防火墙 防火墙配置文件选项: /domain : 启用域网络,如工作场所网络 /private : 启用专用网络,如我的家庭或工 作网络 /public : 启用公用网络,如机场和咖啡店 里的网络 如果未提供配置文件选项,则会配置所有配 置文件。 /ntlm 默认情况下,远程调试器与可以在 Visual Studio 计算机与远程调试器计算机 之间使 用的最强 Windows
9、身份验证提供程序 协 商。现在,如果两台计算机在同一个域中, 则通常 是 Kerberos 身份验证。这样做是为 了提供尽可能最好的安全性。 “/ntlm”选项指示远程调试器改用 NTLM 身份验证 提供程序。通常不建议使用此选 项。但是,在 Kerberos 无法进行身份验证 的 情况下,它非常有用。 /hostname hostname_value 指示远程调试器使用指定主机名值或 IP 地 址值 侦听网络。在具有多个网卡或多个已分 配 DNS 主机名 的计算机上,此选项可以用 于限制其中哪些 允许进行远程调试。例如, 某个服务器可能具有一个面向 Internet 的 地址和 一个内部地址
10、。通过使用 “/hostname private_ip_address”,将不 能通过 面向 Internet 的地址使用远程调 试器。 /noclrwarn 远程调试器尝试加载 2.0 公共语言运行时 (CLR)。此选项 禁止在安装的 CLR 不兼容时 显示警告。如果 不想调试托管代码,则此选 项很有用。 /nosecuritywarn 在使用“/noauth”或“/allow”命令行选 项时,远程调试器通常 会显示警告,因为这 两个选项都有危险,使用时需要 小心。 “/nosecuritywarn”将禁止显示这些警告。 只有在您了解 了“/noauth”和“/allow” 选项的安全含义以
11、后,才能使用此选项。 /nofirewallwarn 在 Windows 防火墙阻止远程调试时不发出 警告。 /nowowwarn 64 位版本的 Windows 能够运行 32 位应用 程序。这种技术 称为“WOW”。当远程调试 器在 WOW 下运行时,无法附加到 64 位进 程。此选项禁止检查此情况。 /FallbackLoadRemoteManagedPdbs 当无法在 Visual Studio 计算机上找到 PDB 文件时,允许在此计算机(目标计算机) 上加 载托管的 PDB 文件。启用后,调试器将 在 最初生成 PDB 的路径中搜索,还会在 dll/exe 当前所在的位置附近搜索。
12、此选项 可能会对远程调试的性能产生影响,因为现 在 对 PDB 的所有查询都将通过网络进行, 但通常情况下影响甚微。 /name server_name (弃用)使远程调试器除了 TCP/IP 端口之 外,还侦听指定 服务器名称。 Visual Studio 可以通过 语法,使用此服务器名称进行 连接。使用此 选项时,远程计算机必须允许文件共享访问。 不建议使用此选项,此选项只是为了向后兼 容才提供的。 安装安装 可通过多种方式安装远程调试。 从文件共享运行远程调试器从文件共享运行远程调试器 对于许多方案,安装远程调试的最简单方式是从文件共享 运行远程调试器 (msvsmon.exe)。Vis
13、ual Studio 将 msvsmon.exe 安装到 以下目录中: Program FilesMicrosoft Visual Studio 16.0Common7IDERemote Debuggerx86 Program FilesMicrosoft Visual Studio 16.0Common7IDERemote Debuggerx64 Program FilesMicrosoft Visual Studio 16.0Common7IDERemote Debuggerarm 通过共享 Visual Studio 计算机上的“Remote Debugger”目录, 可以在远程 计算机
14、上运行 msvsmon.exe。 如果 msvsmon.exe 从共享位置运行,则以下功能不起作用: 正在启动 Windows 应用商店应用。不过,仍然可以手动附加。 JavaScript 调试 单步执行 Web 服务。但是,仍然可以手动附加。 自动在调试器下启动 ASP.NET 站点。仍然可以 手动附加。 在远程计算机上运行远程调试器安装程序在远程计算机上运行远程调试器安装程序 “Visual Studio 2019 远程工具”安装程序中 包含远程调试器。通过访问 并搜索产品可从 Microsoft 下载中心下载最新版本。 安全性安全性 远程调试器支持两种身份验证模式: 1. Windows
15、 身份验证模式(默认使用) 2. 无身份验证模式 Windows Windows 身份验证模式身份验证模式 Windows 身份验证模式使用 Windows 的内置安全机制来提供高级别的 安全性。 Kerberos 和/或 NTLM 对所有请求进行身份验证和加密。默认 情况下,远程调 试器仅接受来自启动远程调试器的 用户和 Administrators 组成员的连接。对 于其他用户,则必须在远程调试器的 用户界面中使用“工具”-“权限”,或 从命令行使用 /allow 选项, 显式授予权限。 无身份验证模式无身份验证模式 无身份验证模式是不安全的。Visual Studio 将当前用户名 发送
16、到远程调试器, 但该信息未经验证。在可能 具有恶意通信的网络上永远不要使用无身份验证模 式。 使用 无身份验证模式时,建议使用防火墙设置对哪些 计算机能够连接到远 程调试器进行限制。即使使用较强防火墙 设置,无身份验证模式提供的保护也 要显著弱于 Windows 身份验证模式。因此建议尽可能使用 Windows 身份验证 模式。 用户界面用户界面 状态窗口状态窗口 状态窗口显示远程调试事件。将显示成功的连接 和成功的初始化。 “选项选项”对话框对话框 选项选项 说明说明 Windows 身 份验证 此选项启用 Windows 身份验证模式。有关详细信息,请参阅 安全 性。 权限 在 Windo
17、ws 身份验证模式下,此选项打开“权限”对话框。 无身份验证 此选项启用无身份验证模式。有关详细信息,请参阅 安全性。 TCP/IP 端 口号 在无身份验证模式下, 远程调试器将侦听 TCP/IP 端口。 此 选项可 以用于配置要侦听的 TCP/IP 端口。 允许任何用 户进行调试 在无身份验证模式下,Visual Studio 将当前用户的用户名发送到 远程调试器。 远程调试器使用此用户名进行安全检查, 以防用户意 外连接到其他用户的远程调试器。 此选项禁用安全检查, 以便任何 用户都可以连接。 最长空闲时 间(秒) 配置远程调试器在无用户连接时在退出之前 等待的秒数。在 Windows 身
18、份验证模式下, 默认的超时时间为无限。 在无身份验证 模式中,默认的超时时间为 15 分钟。 “权限权限”对话框对话框 在 Windows 身份验证模式下, 可以使用此对话框指定哪些用户能够 通过远程调 试器进行连接和调试。应该只允许完全信任 的用户进行调试。如果为恶意用户 提供连接权限,他们将 能够接管运行远程调试器的用户的用户帐户。 防火墙配置防火墙配置 若要允许进行远程调试,必须配置 Visual Studio 计算机与远程调试器 之间的 所有防火墙,以便远程调试器(msvsmon.exe) 能够接收从 Visual Studio 发送 的数据。远程调试器能够 自动配置 Windows
19、防火墙。 在使用 Windows 防火墙之外的防火墙(如第三方软件 防火墙或硬件防火墙)时, 必须手动配置该防火墙, 以允许进行远程调试。 为此, 请允许在 msvsmon.exe 侦 听的 TCP/IP 端口 上进行通信。默认情况下,这些端口是端口 4024 和 4025, 其中 4024 可在所有操作系统上使用,而 4025 仅在 Windows x64 上使用,以 允许调试 x86 进程。 默认情况下, “远程调试器配置”对话框将 Windows 防火墙 规则配置为应用于 所有网络配置文件(域、专用和非正式/公用)。 “非正式/公用”配置支持 Visual Studio 计算机 通过以太
20、网电缆直接连接至目标设备这一方案。Visual Studio 远程调试器在此方案中使用身份验证和加密来保证 安全。 您可以通过清除相应的复选框 (域/专用/非正式)禁用一个或多个网络配置文件。 但如果取消选中所有当前活动的配置文件, 配置对话框将禁用“配置远程调试” 按钮。例如, 如果您的计算机连接至一个网络,并且此网络是非正式 网络,则 取消选中“非正式”复选框将禁用“配置”按钮。 Windows Web Windows Web 服务服务 远程调试使用 Windows Web 服务 API 实现。Windows Web 服务 API 是应用程 序(如远程调试器)可以用于 在网络上进行通信的构
21、建基块。此 API 已包含在 Windows 7、Windows Server 2008 R2 和更高版本操作系统中。对于 Windows Server 2008 (R2 以前的版本),Visual Studio 远程工具安装程序将自动安装 API。 运行远程调试器的多个实例运行远程调试器的多个实例 同一台计算机上可以运行远程调试器的多个实例。如果 多个用户共享一台服务 器,并且每个用户需要运行自己的远程调试器实例来调试自己的进程,则 需要 采用这种方式。 远程调试器的每个实例都在自己的 TCP/IP 端口号上运行。 可以从远程调试器 中的“工具”-“选项”,或从命令行使用 /port: ,
22、将远程调试器配 置为侦听特定端口号。 若要连接到远程调试器的特定实例, 请在“远程计算机”/“限定符” 设置中包 含端口号以及计算机名称(例如: MyServer: 用于连接到 MyServer 上的端口 1234)。 将远程调试器作为服务运行将远程调试器作为服务运行 可以将远程调试器作为 Windows 服务或 Windows 应用程序运行。 通过将远程 调试器作为服务运行,无需登录远程计算机即可轻松 调试服务器应用程序,如 ASP.NET。 将远程调试器作为服务运行会导致它始终在网络上运行和 侦听。建议不要将远 程调试器作为服务运行来调试 客户端应用程序。 使用 Visual Studio
23、 2019 远程调试配置向导,可以控制 运行远程调试器服务 所用的用户名和密码。远程 调试器作为服务运行时,必须满足以下要求才能进 行远程 调试: 1. 用户必须是 Administrators 组的成员才能对任何进程进行 调试。 2. 必须授予用户“作为服务登录”特权。 使用“本地安全 策略” 管理工具 可以完成此操作。 远程调试器服务的默认用户是“LocalSystem”。 此服务的名称为“Visual Studio 2019 远程调试器”。建议 你仅通过 Visual Studio 2019 远程调试器 配置向导来控制此服务。如有必要,可以通过用于计 算机管理的 管理工具或命令行(net stop msvsmon160 或 net start msvsmon160)来控制此服务。