Visual Studio 支持从一台计算机到另一台计算机的远程调试。 进行远程调试时,主机可以是任何支持 Visual Studio 的平台。 远程计算机可以是 32 位(Windows Vista、Windows 2000、Windows XP 或 Windows Server 2003)平台,也可以是 64 位(IA64、IA64 WOW 模式、x64 或 x64 WOW 模式)平台。
远程调试组件
Native调试
msvsmon.exe |
远程计算机上的任意位置。 32 位和 64 位调试应使用不同版本的 msvsmon。 请确保在远程计算机上安装了正确的版本。 |
dbghelp.dll |
位于 msvsmon 所在的目录中。 此可选文件用于保存应用程序的转储。 若未安装此文件,调试器使用随操作系统安装的默认版本的 dbghelp.dll 保存转储。 |
msdbgui.dll |
位于 msvsmon 所在的目录中。 此可选文件包含用于远程调试器的经本地化的字符串、对话框和帮助。 若此文件丢失,调试器将使用默认的英语资源。 |
托管调试
msvsmon.exe |
远程计算机上的任意位置。 32 位和 64 位调试应使用不同版本的 msvsmon。 请确保在远程计算机上安装了适当的版本。 |
msvsmon.exe.config |
位于 msvsmon 所在的目录中。 若要加载正确的 .NET Framework 版本,该文件是必需的。 |
Symsrv.dll |
位于 msvsmon 所在的目录中。 如果在远程调试中使用符号服务器,则该文件是必需的。 |
mcee.dll |
位于 msvsmon 所在的目录中。 若要调试使用 .NET Framework 的 C++ 代码,该文件是必需的。 |
msvb7.dll 和 msvb7ui.dll |
位于 msvsmon 所在的目录中。 仅在 Visual B |
特殊组件
AvVsPkDH.dll |
用于在应用程序验证工具下运行应用程序。 有关设置信息,请参见应用程序验证工具文档。 |
mpishim.exe |
用于在群集上调试应用程序。 |
iisresolver.dll |
用于调试禁用了 Windows 身份验证的 Web 服务器。 |
远程调试权限
下面的权限是远程调试所必需的。
Native调试
- 调试以您的帐户和密码运行的进程:不需要特殊的权限。
- 调试以另一个帐户名运行的进程:您的 Windows 登录帐户必须是远程计算机上系统管理员组的成员。
托管调试
- 调试以您的帐户和密码运行的进程:不需要特殊的权限。
- 调试以另一个帐户名运行的进程:您必须具有远程计算机上的管理员特权。 例如,如果 ASP.NET 辅助进程 aspnet_wp.exe 作为 SYSTEM 或 ASPNET 运行,则您必须是运行该进程的计算机上的管理员。
- 承载公共语言运行时的进程(如 SQL Server 2005)可能强制应用自定义调试特权。
设置远程调试
若要启用远程调试,可以:
从一个文件共享中运行远程调试监视器是启用远程调试的最容易的方法。在 64 位平台上安装 Visual Studio 时,会将适用于所有三个体系结构的远程调试监视器版本复制到以下文件夹:安装路径\Microsoft Visual Studio x.x\Common7\IDE\Remote Debugger。若要安装其他远程调试组件,请按照本文中的过程进行操作。
如果共享 Visual Studio 计算机中的远程调试器目录,则可以在远程计算机中运行 msvsmon.exe。下列调试器方案要求您在远程计算机中安装远程调试组件:
单步执行从 WCF 客户端调用的承载服务。
自动调试 ASP.NET Web 应用程序。
两种情况下,都可以进行手动附加,而无需在远程计算机中安装组件。除了从共享位置运行之外,还可以在远程计算机中安装必要的远程调试组件。 此安装提供对所有远程调试功能的访问。 在 x86 平台上运行远程调试器安装时,仅安装 x86 远程调试组件。 没有用于安装 64 位组件的选项。 如果在 64 位平台上运行远程调试器安装,则会同时安装 x86 和 64 位组件。
安装远程调试组件
远程调试器可在 Visual Studio 安装包中找到。
在 Windows 资源管理器中,打开该包,然后找到 vs/Remote Debugger。
在 vs/Remote Debugger 文件夹中,根据您的平台启动相应的远程调试器安装程序版本:rdbgsetup_x86、rdbgsetup_x64 或 rdbgsetup_ia64。
按照远程调试器安装程序向导中的说明完成安装。
如果您愿意,可以通过手动复制文件来安装远程调试组件。 针对 32 位和 64 位平台,Visual Studio 包括不同版本的远程调试监视器。 如果使用远程调试器安装程序,它会自动安装正确版本的远程调试监视器。 然而,如果手动复制文件,则您必须确保所复制的版本正确无误。
安装远程调试组件以后,必须确保具有所需的权限以便对远程计算机上的程序进行调试。
配置防火墙
必须配置 Windows 防火墙才能启用远程调试。 在首次启动远程调试时,Visual Studio 会在 Visual Studio 主机上进行必要的配置。 在远程计算机中首次运行远程调试监视器时,远程调试监视器会在远程计算机上配置 Windows 防火墙。
在 Windows XP 上,此配置是完全透明和自动的,但是在 Windows Vista 上,新的安全模型要求先授予权限,然后软件才能配置防火墙。 此权限是通过“用户帐户控制”对话框授予的。
如果远程调试监视器必须在远程计算机上配置 Windows 防火墙,远程计算机上则会显示“用户访问控制”对话框。 如果远程计算机不可见,您可能意识不到 UAC 对话框已显示在远程计算机的监视器上。 在这种情况下,您可能会误认为远程调试已停止响应。 实际上,远程调试监视器只是在等待有人在远程计算机上授予 UAC 权限。
必须手动配置 Windows 防火墙的情况是很少见的。
开始远程调试
确保您在远程计算机上具有必需的远程调试权限。 有关更多信息,请参见远程调试权限。
对于 SQL 以外的远程调试,请确保您正在远程计算机上运行远程调试监视器。 进行 SQL 调试时,远程调试监视器会在调试期间自动启动。
在调试器主机上启动 Visual Studio。
运行远程调试监视器
远程调试监视器 (msvsmon.exe) 是一个小型应用程序,Visual Studio 与之连接以进行远程调试。 在远程调试过程中,Visual Studio 在一台计算机(调试器主机)上运行,远程调试监视器和正在调试的应用程序在远程计算机上运行。在开始远程调试前,必须设置远程调试。 此外,还必须确保具有在远程计算机上进行调试所需的权限。 完成这两项操作后,即可运行远程调试监视器,开始远程调试。
首次运行远程调试监视器时,必须在安装远程调试监视器的计算机上配置 Windows 防火墙。 此配置对于启用远程调试是必需的。 在 Windows Vista 上,必须在“用户帐户控制”对话框中授予此配置的权限,该对话框在要求配置时会出现。 如果已使用远程调试器配置向导配置了 Windows 防火墙,则不需要此配置。
启动远程调试监视器
单击“开始”,指向“所有程序”,指向“Visual Studio ”,然后单击“Visual Studio 远程调试器”。
- 或 -
在 Windows 命令提示符下,运行 msvsmon.exe。
“远程调试监视器”作为 Windows 应用程序运行。 用户界面显示“远程调试监视器”正在运行,并使远程调试易于设置。
现在,可以采用两种模式中的一种来配置远程调试的“远程调试监视器”:
将远程调试监视器配置为服务
单击“开始”,选择 Microsoft Visual Studio XX,然后单击“Visual Studio XX 远程调试器配置向导”。
按照向导中的步骤将远程调试设置为服务。
远程调试本地生成的项目
可能需要调试一个在本地生成的项目,然后在远程计算机上运行可执行文件。 本主题阐释如何更改本地项目设置以在远程计算机上运行可执行文件。
Visual C++
此处显示的过程假定您在计算机 local1 中生成了 MFC 项目 mymfc。 您需要在计算机 remote1 中运行应用程序 mymfc.exe,然后使用计算机 local1 中的 Visual Studio 调试器进行调试。
准备远程计算机
在 remote1 上启动 msvsmon。
将可执行文件 mymfc.exe 复制到远程计算机上的某个位置。
此示例将使用 c:\temp\mymfc.exe。
准备本地计算机
在“项目”菜单上选择“属性”。
在“mymfc 属性页”对话框中展开“配置属性”节点,然后单击“调试”。
将“要启动的调试器”更改为“远程 Windows 调试器”。
对于“远程命令”设置,键入 c:\temp\mymfc.exe。
将“工作目录”更改为您的项目所在的目录。
对于“远程服务器名称”设置,键入 remote1。
将“连接”更改为“带 Windows 身份验证的远程访问”。
将“调试器类型”从“自动”更改成“仅限本机”,因为您知道正在调试本机代码。
单击“确定”。
将“符号路径”设置为 local1 上调试符号所在的位置。
本机远程调试无法使用远程计算机上的符号。 因此,必须提供一个本地位置。
在“调试”菜单中选择“启动”开始调试。
Visual C#
此处显示的过程假定您的计算机 local1 上已生成 Windows 应用程序项目 mywin4m。 您需要在计算机 remote1 上运行应用程序 mywin4m.exe,并在计算机 local1 上使用 Visual Studio 调试器进行调试。
准备远程计算机
准备本地计算机
在“文件”菜单上,指向“打开”,然后单击“项目/解决方案”。
在“打开项目”对话框中,找到本地或远程计算机上的 mywin4m.exe。
选择 mywin4m.exe,然后单击“确定”。
在“解决方案资源管理器”中右击该项目,再单击“属性”。
在 mywin4m 属性页上,单击“调试”。
在“工作目录”文本框中,键入 c:\temp。
在“计算机名”文本框中,键入 remote1。
(可选)在“调试器类型”下选择“混合模式”,以显式启用托管代码和非托管代码的调试。
在远程计算机上启动远程调试监视器,并将远程调试模式设置为 Windows 身份验证模式或无身份验证模式。
在“调试”菜单中选择“启动”开始调试。
跨域远程调试
远程调试涉及 Visual Studio 调试器和远程调试监视器 (msvsmon.exe) 之间的双向通信。 为了使用远程调试,运行 Visual Studio 以及运行 msvsmon.exe 的用户身份非常重要。
若要连接到 msvsmon,您必须使用与 msvsmon 相同的用户帐户或管理员帐户来运行 Visual Studio。 (也可以将 msvsmon 配置为接受来自其他用户的连接。)
如果运行 msvsmon 的用户可在 Visual Studio 计算机上通过身份验证,则 Visual Studio 将接受来自 msvsmon 的连接。 (该用户在 Visual Studio 计算机上必须有本地帐户。)
在满足这些限制后,远程调试可应用于多种场合,包括:
因此,您在每台计算机上都必须有一个本地用户帐户,并且两个帐户必须有相同的用户名和密码。 如果想要使用不同的用户帐户运行 msvsmon 和 Visual Studio,您在每台计算机中必须有两个用户帐户。
如果某个域帐户与某个本地帐户拥有相同的名称和密码,则可以使用该域帐户运行 Visual Studio。 在每台计算机中,仍须有拥有相同用户名和密码的本地帐户。
对于工作组中安装了 Windows XP Professional 的计算机,本地安全设置可能会导致无法进行远程调试。 为了能执行远程调试,必须将策略设置为**“经典”**。 (此问题不适用于加入域的 Windows XP 计算机,也不适用于运行 Windows Server 2003 或较新版本的 Windows Server、Windows Vista 或 Windows 7 的计算机。)
更改安全策略以允许在域之间进行远程调试
在本地计算机上,从“开始”菜单中选择“控制面板”。
在“控制面板”中双击**“管理工具”。
在“管理工具”窗口中双击“本地安全策略”。
在“安全设置”下打开“本地策略”文件夹。
在“本地策略”文件夹中选择“安全选项”。
在“策略”列中,找到“网络访问: 本地帐户的共享和安全模式”并双击它。
在“网络访问: 本地帐户的共享和安全模式”对话框中,将设置从“仅来宾 - 本地用户以来宾身份验证”更改为“经典 - 本地用户以自己的身份验证”并单击“确定”。
关闭该窗口并重新启动计算机。
在远程计算机上重复步骤 1 到 8。
现在就可以在两台计算机上使用相同的用户名进行远程调试了。