使用 Visual Studio 2010 进行远程调试






4.79/5 (19投票s)
使用 Visual Studio 2010 进行远程调试
我最近需要使用 Visual Studio 2010 远程调试一个 .NET 桌面应用程序。在阅读了 MSDN 关于此主题的文档后,我仍然缺少一些信息。我希望这篇博文能填补其中的一些空白,并帮助您配置和运行远程调试工具。
让我们先从调试过程中涉及的各部分定义开始
- 主机 – 是安装了 Visual Studio 并控制调试过程的机器
- 远程计算机 – 是运行被调试程序的机器
由于调试过程完全由主机控制,因此远程计算机上必须有一个侦听器来执行从 Visual Studio 发送的命令。这个侦听器称为 远程调试监视器 (msvsmon.exe)。有两种安装方式——您可以从Microsoft 下载并运行安装包,或者将所有必要文件从 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger (我 64 位 Win7 上的路径) 复制过来。请注意:如果您的主机是 x86 机器,那么您的远程计算机只能使用 x86 程序包——您无法在 32 位调试器中调试 64 位进程。但是,您可以在 64 位调试器中调试 32 位进程。
下一步 (我认为最枯燥且容易出错的) 是网络设置。理想情况下,当您以提升的权限运行 Visual Studio 和远程调试监视器时,它们会处理 Windows 防火墙设置,但现实往往并非如此,您可能需要手动操作。幸运的是,MSDN 网站很好地解释了 WinXP、Vista 和 Win7 的手动配置过程。下一个重要的事情是安全。您可以选择在“无身份验证
”模式下进行调试 (当然,这种模式安全性较低),或者在 Windows 身份验证模式下进行。不幸的是,Windows 身份验证模式要求在主机和远程计算机上设置相同的帐户——用户名和密码必须相同。如果这对您来说是个问题,那么您只能选择“无身份验证
”模式,在这种模式下,您将冒着允许所有人访问您的调试监视器的风险。
完成配置部分后,我们终于可以开始调试过程了。首先,在远程计算机上启动 msvsmon.exe (远程调试监视器)——它将与在主机上运行的 Visual Studio 进行通信。假设我们的应用程序名为 RemoteControl.exe,并且是用 C# 编写的。首先,我们需要将其部署到远程计算机上,例如部署到 C:\Users\concept\Desktop\RemoteControl 文件夹 (请记住也复制所有 pdb 文件和主应用程序所需的程序集)。现在,我们可以选择在调试器下启动应用程序,或者将调试器附加到已运行的进程。我们先从第一种场景开始。如果您可以访问应用程序的解决方案文件夹和所有项目文件,那么您可以通过修改启动项目属性页来启动远程调试。
如果您无法访问应用程序解决方案,则需要使用应用程序的 EXE 文件。从文件菜单中选择打开 -> 项目/解决方案…,然后找到您应用程序的 EXE 文件。选择新打开的项目并选择属性。在页面中填写以下值:
附加到已启动的进程相当简单:从调试菜单中,选择附加到进程…。如果您在 Windows 身份验证模式下进行调试,请将“传输”框设置为“默认”。在“限定符”字段中,键入您的远程调试监视器会话的名称。通常是您的用户名 + @ + 远程计算机名称,例如 Sebastian@REMOTE-PC (启动 msvsmon.exe 后,会话名称也会显示在列表框中)。
最后,关于调试过程说几句。不幸的是,调试符号配置因所选的调试引擎 (本机、托管、混合) 而异。使用托管调试引擎时,必须在远程计算机上可以访问符号 (因此您需要将应用程序及其所有 pdb 文件一起部署,并为 .NET Framework 调试符号在远程计算机上设置 _NT_SYMBOL_PATH
变量)。使用本机调试引擎时,符号会从主机加载 (因此您必须将包含应用程序所有 pdb 文件的目录添加到 Visual Studio 的符号搜索路径中——工具 -> 选项 -> 调试 -> 符号)。有趣的是,源文件始终从主机加载 (如果您不使用任何类型的源服务器)。总结一下:对于没有互操作部分的 .NET 应用程序,请始终选择托管引擎。本机引擎需要更多信息 (例如所有本机库的符号),并提供通常在调试纯 .NET 应用程序时不需要的功能。
我没有涉及 Web 应用程序的远程调试以及将远程调试监视器作为服务运行的主题。如果您希望将来出现这样的博文,请留下评论。 :)
分类在: CodeProject, 调试, Visual Studio
